美文网首页
2020-05-27-Android属性动画

2020-05-27-Android属性动画

作者: 耿望 | 来源:发表于2020-05-27 11:19 被阅读0次

    属性动画

    属性动画支持在xml文件中定义,便于代码复用。
    下面先给出一个最简单的ValueAnimator例子。
    我们需要在res/animator目录下新建一份property.xml文件

    <animator xmlns:android="http://schemas.android.com/apk/res/android"
        android:valueType="intType"
        android:valueTo="30dp"
        android:valueFrom="300dp"
        android:duration="1000"
        android:startOffset="100"
        android:repeatCount="3"
        android:repeatMode="reverse"/>
    

    然后在java中通过AnimatorInflater.loadAnimator方法load这份文件。

    
        private ImageView imageView;
        private ValueAnimator valueAnimator;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_movie);
            imageView = findViewById(R.id.animatorImg);
            valueAnimator = (ValueAnimator) AnimatorInflater.loadAnimator(this, R.animator.property);
            imageView.setOnClickListener(new clickUpdate());
        }
    

    然后定义一个回调,可以在动画过程中改变view的属性值。

        private class valueUpdate implements ValueAnimator.AnimatorUpdateListener {
    
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int current = (int) animation.getAnimatedValue();
                imageView.getLayoutParams().height = current;
                imageView.getLayoutParams().width = current;
                imageView.requestLayout();
            }
        }
    

    最后为该view定义一个点击效果,每次点击会执行一个缩放动画。

        private class clickUpdate implements View.OnClickListener {
    
            @Override
            public void onClick(View v) {
                scaleImg();
            }
        }
        private void scaleImg() {
            valueAnimator.addUpdateListener(new valueUpdate());
            valueAnimator.start();
        }
    

    还有一种ObjectAnimator继承了ValueAnimator。
    我们可以在XML中指定需要修改的属性,而不需要在代码中使用回调,更加简单。
    下面给出一个例子,设置图片的透明度从0.1到1.0渐变。

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="alpha"
        android:valueTo="0.1f"
        android:valueFrom="1.0f"
        android:valueType="floatType"
        android:duration="1000"
        android:repeatCount="3"
        android:repeatMode="reverse"
        android:startOffset="100"/>
    
    private ObjectAnimator objectAnimator;
    objectAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.property_animator);
            objectAnimator.setTarget(imageView);
    objectAnimator.start();
    

    参考

    属性动画概览
    动画资源
    Android属性动画解析和实例

    相关文章

      网友评论

          本文标题:2020-05-27-Android属性动画

          本文链接:https://www.haomeiwen.com/subject/thiiahtx.html