如何在TranslateAnimation之后的某个位置永久设置ImageView

时间:2017-08-15 08:54:37

标签: java android

我引用了其他问题,但无法找到解决方案,我对编程也很陌生。

所以我在ImageView上实现了TranslateAnimation,但一旦动画结束,它就会返回原来的位置。我在OverAnimationEnd上使用了Override,但这似乎并不起作用。有人能弄清楚我应该做什么吗?

public class PackAnimation extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pack_animation);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    String s = getIntent().getStringExtra("CHOICE");


    final ImageView pandya = (ImageView) findViewById(R.id.pandya);

    final int amountToMoveRight = 600;
    final int amountToMoveDown = 0;

    TranslateAnimation anim = new TranslateAnimation(0, amountToMoveRight, 0, amountToMoveDown);
    anim.setDuration(100);

    anim.setAnimationListener(new TranslateAnimation.AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) { }

        @Override
        public void onAnimationRepeat(Animation animation) { }

        @Override
        public void onAnimationEnd(Animation animation)
        {
            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)pandya.getLayoutParams();
            params.topMargin += amountToMoveDown;
            params.leftMargin += amountToMoveRight;
            pandya.setLayoutParams(params);
        }
    });

    pandya.startAnimation(anim);
}

 }

2 个答案:

答案 0 :(得分:1)

您可以anim.setFillAfter(true)使用TranslateAnimation并使按钮保持在新位置,但按钮点击将无法在新位置使用。

因此请使用ViewPropertyAnimatorObjectAnimator。这些是属性动画,将更改View的位置,而TranslateAnimation是视图动画,不会更改视图的实际属性。

例如,使用ViewPropertyAnimator

pandya.animate()
    .translationX(amountToMoveRight)
    .translationY(amountToMoveDown);

有关详细信息,请参阅blog

  

最后,之前的动画改变了视觉外观   目标对象......但它们实际上并没有改变对象   他们自己。您可能遇到过这个问题。假设你想要   将按钮从屏幕的一侧移动到另一侧。 您可以使用   TranslateAnimation这样做,按钮将愉快地滑行   到屏幕的另一侧当动画完成时,它   很乐意回到原来的位置。所以你找到了   动画上的setFillAfter(true)方法再次尝试。这一次   按钮保持在动画的位置。和   你可以点击它来验证 - 嘿!怎么没有按钮   点击?问题是动画会改变按钮的位置   绘制,但不是按钮实际存在于其中的位置   容器。如果要单击按钮,则必须单击   曾经居住过的地方。或者,作为一种更有效的解决方案   (而且对你的用户来说只是一个有用的东西),你必须写   您的代码实际更改布局中按钮的位置   当动画结束时。

答案 1 :(得分:0)

使用anim.setFillAfter(true);,它将在动画结束后保留​​在最终位置。