我引用了其他问题,但无法找到解决方案,我对编程也很陌生。
所以我在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);
}
}
答案 0 :(得分:1)
您可以anim.setFillAfter(true)
使用TranslateAnimation
并使按钮保持在新位置,但按钮点击将无法在新位置使用。
因此请使用ViewPropertyAnimator
或ObjectAnimator
。这些是属性动画,将更改View
的位置,而TranslateAnimation
是视图动画,不会更改视图的实际属性。
例如,使用ViewPropertyAnimator
:
pandya.animate()
.translationX(amountToMoveRight)
.translationY(amountToMoveDown);
有关详细信息,请参阅blog:
最后,之前的动画改变了视觉外观 目标对象......但它们实际上并没有改变对象 他们自己。您可能遇到过这个问题。假设你想要 将按钮从屏幕的一侧移动到另一侧。 您可以使用 TranslateAnimation这样做,按钮将愉快地滑行 到屏幕的另一侧。 当动画完成时,它 很乐意回到原来的位置。所以你找到了 动画上的setFillAfter(true)方法再次尝试。这一次 按钮保持在动画的位置。和 你可以点击它来验证 - 嘿!怎么没有按钮 点击?问题是动画会改变按钮的位置 绘制,但不是按钮实际存在于其中的位置 容器。如果要单击按钮,则必须单击 曾经居住过的地方。或者,作为一种更有效的解决方案 (而且对你的用户来说只是一个有用的东西),你必须写 您的代码实际更改布局中按钮的位置 当动画结束时。
答案 1 :(得分:0)
使用anim.setFillAfter(true);
,它将在动画结束后保留在最终位置。