3

このコードを使用してビューを移動していますが、ビューの実際の位置は変更されていません。

                TranslateAnimation ta = new TranslateAnimation(0, 0, Animation.RELATIVE_TO_SELF, -mbar4.getHeight());
                ta.setDuration(1000);
                ta.setFillAfter(true);
                v4.startAnimation(ta);
4

2 に答える 2

3

バージョン 3 (API 11) までの android を除き、すべてのアニメーションは実際にはビューを変更せず、表示方法のみを変更します。それだけでなく、GPU をまったく使用していないと思います。

それを確認するには、ボタンと setOnClickListener を使用して、使用するアニメーションに関係なく、クリックが元の位置とサイズでのみ機能することを確認します。

translateAnimation を使用してビューを移動するサンプル コードを次に示します。

final int deltaXToMove=50;
TranslateAnimation translateAnimation=new TranslateAnimation(0,deltaXToMove,0,0);
int animationTime=1000;
translateAnimation.setDuration(animationTime);
translateAnimation.setFillEnabled(true);
translateAnimation.setFillAfter(true);
final Button b=(Button)findViewById(R.id.button);
translateAnimation.setAnimationListener(new AnimationListener()
  {
  @Override
  public void onAnimationEnd(Animation animation)
    {
    animation.setFillAfter(false);
    FrameLayout.LayoutParams par=(LayoutParams)b.getLayoutParams();
    par.leftMargin=deltaXToMove;
    b.setLayoutParams(par);
    }
...
b.startAnimation(translateAnimation);
于 2012-06-08T11:07:37.257 に答える
0

TranslateAnimation はビューが描画される場所のみを変更するためです。

これを試して:

    TranslateAnimation ta = new TranslateAnimation(0, 0, Animation.RELATIVE_TO_SELF, -mbar4.getHeight());
    ta.setDuration(1000);
    ta.setFillAfter(true);
    ta.setAnimationListener(new AnimationListener() {

        public void onAnimationStart(Animation animation) {}

        public void onAnimationRepeat(Animation animation) {}

        public void onAnimationEnd(Animation animation) {
            ((RelativeLayout.LayoutParams)v4.getLayoutParams()).bottomMargin = mbar4.getHeight();
            v4.requestLayou();
        }
    });
    v4.startAnimation(ta);

RelativeLayout.LayoutParams を親レイアウトが何であれ変更します。

于 2012-06-08T10:05:11.857 に答える