属性动画(实现代码)

在代码当中都已经添加了注释,不明白的反复看,看反复,推论思路即可!!!

一、在Xml中:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="50dp"
        android:layout_height="50dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/d" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        app:layout_constraintCircle="@id/imageView"
        app:layout_constraintCircleRadius="100dp"
        app:layout_constraintCircleAngle="30"
        app:srcCompat="@drawable/c" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="50dp"
        android:layout_height="50dp"
        app:layout_constraintCircle="@id/imageView"
        app:layout_constraintCircleRadius="100dp"
        app:layout_constraintCircleAngle="120"
        app:srcCompat="@drawable/b" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="50dp"
        android:layout_height="50dp"
        app:layout_constraintCircle="@id/imageView"
        app:layout_constraintCircleRadius="100dp"
        app:layout_constraintCircleAngle="260"
        app:srcCompat="@drawable/a" />

</android.support.constraint.ConstraintLayout>

二、在Activity中:

public class MainActivity extends AppCompatActivity {

    private ImageView imageView;
    private ImageView imageView2;
    private ImageView imageView3;
    private ImageView imageView4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //创建并开启动画
        creatAndStartAnimator(imageView2,3000);
        creatAndStartAnimator(imageView3,5000);
        creatAndStartAnimator(imageView4,7000);
    }
    private void creatAndStartAnimator(final ImageView view ,  long duration){
        //原生控件                                                             //视图获取参数
        final ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) view.getLayoutParams();
        //实例化属性动画                                       //360度+你要操作的参数
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(params.circleAngle,360+params.circleAngle);
        // 添加更新监听
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                //在动画更新上的时候,获取属性动画
                params.circleAngle = (Float) animation.getAnimatedValue();
                // 在试图上显示的参数
                view.setLayoutParams(params);
            }
        });
            //设置时间
            valueAnimator.setDuration(duration);
            //设置个数、大小
            valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
            //设置监听
            valueAnimator.setInterpolator(new LinearInterpolator());
            //开启动画
            valueAnimator.start();
    }
    private void initView() {
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView2 = (ImageView) findViewById(R.id.imageView2);
        imageView3 = (ImageView) findViewById(R.id.imageView3);
        imageView4 = (ImageView) findViewById(R.id.imageView4);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42749901/article/details/81986865