我希望按钮向下移动200px(从0,0到200,200) 1秒后,再次向上移动到原始位置。
但是下面的代码就像从(0,200)到(0,400)开始,不是从(0,0)开始
如果我将一个动画放入AnimationSet,它可以正常工作。但是如果我在AnimationSet中放置两个以上的动画,那就很奇怪了。
有什么问题?
public class MainActivity extends Activity {
private static final int DISTANCE = 200;
private static final long DURATION = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
TranslateAnimation aniMove = new TranslateAnimation(0, 0, 0, DISTANCE);
aniMove.setDuration(DURATION);
TranslateAnimation aniMoveBack = new TranslateAnimation(0, 0, DISTANCE, 0);
aniMoveBack.setDuration(DURATION);
aniMoveBack.setStartOffset(DURATION + 1000);
AnimationSet aniSet = new AnimationSet(true);
aniSet.addAnimation(aniMove);
aniSet.addAnimation(aniMoveBack);
btn.startAnimation(aniSet);
}
}
这是XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="0dp" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
答案 0 :(得分:1)
AnimationSet表示应该一起播放的一组动画。该 每个动画的转换组合在一起 一次转型。
无法以这种方式使用AnimationSet,它可以结合多个动画的功能。使用AnimationSet,您可以同时执行alpha和旋转动画。
如果你想按顺序播放2个动画,你应该在第一个动画的onAnimationEnd()中开始第二个动画。
答案 1 :(得分:1)
我找到了解决方案。 TranslateAnimation()参数中的坐标不是绝对坐标。 因为我调用了setStartOffset(N),所以aniMoveBack动画将从aniMove坐标的末尾开始。 这是相对位置。
所以,代码应该像这样修复..
TranslateAnimation aniMoveBack = new TranslateAnimation(0, 0, 0, -DISTANCE);