同时将一个动画应用于多个视图

Jam*_*meo 20 android rotation image-rotation

所以我想同时旋转一些视图,所有视图都使用相同的旋转规格.问题在于,由于某种原因,旋转对第二个元素的作用不同.显然,这与动画对象实际上在这两行代码之间改变状态有关.显然我可以创建一个单独的Animation对象并应用它,但我觉得有一种更简单的方法(我有大约15个视图)

仅正确旋转第一个视图:

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
target.startAnimation(rotateAnim);
lightBtn.startAnimation(rotateAnim);
Run Code Online (Sandbox Code Playgroud)

正确旋转

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait);
target.startAnimation(rotateAnim);
lightBtn.startAnimation(rotateAnim2);
Run Code Online (Sandbox Code Playgroud)

XML:

<?xml version="1.0" encoding="utf-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="-90"
    android:toDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="500" android:fillAfter="true">
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

Lea*_*ros 10

像这样做:

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f);
arrayListObjectAnimators.add(anim);

ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f);
arrayListObjectAnimators.add(anim1);

ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(objectAnimators);
animSetXY.duration(1000);
animSetXY.start();
Run Code Online (Sandbox Code Playgroud)

  • 这不回答问题,如果我是正确的,你将2个动画应用于同一个视图.原帖想要将相同的动画应用于2个视图 (5认同)

Jam*_*meo 5

所以我想这是不可能的,所以我创建了一个帮助方法,只是将相同的动画应用于视图列表:

public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){

    for(int i = 0; i < views.size(); i++){
        RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale);
        temp.setDuration(duration);
        temp.setFillAfter(fillAfter);
        views.get(i).startAnimation(temp);
    }
}
Run Code Online (Sandbox Code Playgroud)

肯定是一个黑客,但我想这就是我现在所能做的一切

  • @Mercury 如果您在主线程上执行此操作,则在完成之前不会绘制任何内容。您的计算阻塞了主线程。没有动画会立即开始。完成后,下一个布局通道将真正开始动画,我相信它们应该同时开始。 (2认同)