Android Studio如何为移动视图设置动画?

时间:2017-08-07 19:23:45

标签: android android-studio animation textview move

我有一个问题。我如何为移动视图制作动画?我想在移动时生成一个字母并为其设置动画(旋转和缩放)。如果我只是开始动画它可以按我的意愿工作,或者如果我只运行移动方法它也可以,但不能一起工作。以下是代码的屏幕: 通过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>

1 个答案:

答案 0 :(得分:0)

使用Move方法移动视图时,它会与尝试设置视图布局的动画冲突。

您应该坚持使用动画对象并将xml中的移动与旋转和缩放相结合,我认为这是您最好的选择,或者自己实现旋转和缩放(与移动时相同)。

您也可以尝试使用覆盖动画的applyTransformation,并在那里获取视图位置并进行更改。