我有一个问题。我如何为移动视图制作动画?我想在移动时生成一个字母并为其设置动画(旋转和缩放)。如果我只是开始动画它可以按我的意愿工作,或者如果我只运行移动方法它也可以,但不能一起工作。以下是代码的屏幕: 通过mainactivity的run方法为每个视图调用Move方法
public Letter (FrameLayout container, Random rnd, Animation animation){
view = new TextView(container.getContext());
letter = letters[rnd.nextInt(letters.length)];
view.setText(letter);
view.setTextColor(Color.rgb(rnd.nextInt(256),rnd.nextInt(256),rnd.nextInt(256)));
view.setGravity(Gravity.CENTER);
container.addView(view);
x = container.getWidth();
y = container.getHeight();
vx = 2 * rnd.nextFloat() * (rnd.nextBoolean()?1:-1);
vy = 2 * rnd.nextFloat() * (rnd.nextBoolean()?1:-1);
view.startAnimation(animation);
move();
}
public void move() {
x+= vx;
y+=vy;
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
params.leftMargin = Math.round(x);
params.topMargin = Math.round(y);
params.gravity = Gravity.LEFT+Gravity.TOP;
view.setLayoutParams(params);
}
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--<scale
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="3"
android:toYScale="3"
android:pivotY="50%"
android:pivotX="50%"
android:duration="10000"
>
</scale>
-->
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration = "3000"
android:repeatCount="infinite"
>
</rotate>
</set>
答案 0 :(得分:0)
使用Move方法移动视图时,它会与尝试设置视图布局的动画冲突。
您应该坚持使用动画对象并将xml中的移动与旋转和缩放相结合,我认为这是您最好的选择,或者自己实现旋转和缩放(与移动时相同)。
您也可以尝试使用覆盖动画的applyTransformation,并在那里获取视图位置并进行更改。