属性动画
属性动画支持在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();