2012-02-09 15 views
2

私は右クリックしてボタンをクリックするとレイアウトの右にある画像をスライドし、クリックすると左のボタンはレイアウトの左にある画像をスライドさせるアニメーションを作成しようとしています。イメージをアニメーションして最後に停止させますか?

私はこれまでやった:

幅= 480

fromXDelta = 408(左クリック)

public class DenemeActivity extends Activity implements View.OnClickListener { 

Button LeftSlide, RightSlide; 
View image; 
int width; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LeftSlide = (Button) findViewById(R.id.slideLeft); 
    RightSlide = (Button) findViewById(R.id.slideRight); 
    image = (View) findViewById(R.id.imageV); 
    width = getWindowManager().getDefaultDisplay().getWidth(); ; 
    LeftSlide.setOnClickListener(this); 
    RightSlide.setOnClickListener(this);  

} 

public void onClick(View v) { 
    runOnAnimation(v.getId(), image); 
} 

void runOnAnimation(final int id, final View view) { 

    AnimationSet animation = new AnimationSet(true); 
    TranslateAnimation translateAnimation = null; 

    int fromXDelta = view.getLeft(); 

    if(id == LeftSlide.getId()) 
     translateAnimation = new TranslateAnimation(fromXDelta, 0, 0, 0); 
    else if(id == RightSlide.getId()) 
     translateAnimation = new TranslateAnimation(fromXDelta, width - view.getWidth() - fromXDelta , 0, 0); 

    translateAnimation.setDuration(1000); 
    animation.addAnimation(translateAnimation); 
    animation.setAnimationListener(new AnimationListener() { 

     public void onAnimationEnd(Animation v) { 
      v.reset(); 
      view.clearAnimation(); 

      // Change view to state B by modifying its layout params and scroll 
      if(id == LeftSlide.getId()) 
       view.layout(0, 0, view.getWidth(), view.getHeight()); 
      else if(id == RightSlide.getId()) 
       view.layout(width - view.getWidth(), 0, width, view.getHeight());    
     } 

     public void onAnimationRepeat(Animation v) {} 
     public void onAnimationStart(Animation v) {} 
    }); 
    view.startAnimation(animation); 
}  
} 

は私がポイントをチェックしました実際に境界から外れているわけではありませんが、左ボタンをクリックすると、境界線の外に画像が来ますか?これは何が原因でしょうか? ありがとうございます...

答えて

1

私はあなたが移動したいビューの位置のタイプが間違っていると思います。 あなたのビューの位置を取得し、次のように翻訳を実装するようにしてください:

int fromPos = view.getLeft(); 
int toPos = 0; 
if(id == LeftSlide.getId()) { 
    translateAnimation = new TranslateAnimation(fromPos, toPos, 0, 0); 
} else { 
    toPos = getWidth()-view.getWidth(); 
    translateAnimation = new TranslateAnimation(fromPos, toPos, 0, 0); 
} 

これはトリックを行う必要があります。

+0

同じことを...外部から来た:/ – yahya

+0

は、onAnimationEnd()関数にコメントしようとしましたか?レイアウトパラメータが設定されていないようにコードをコメントするとどうなりますか? – Andreas

+0

これは、view.clearAnimationの後に画像が消滅したため、画像が表示されるためです。レイアウトパラメータが設定されていないと、まったく動作しません。 – yahya

関連する問題