Android 总结3-动画

Posted by Jfson on 2019-01-10

View动画

View动画定义了渐变Alpha、旋转Rotate、缩放Scale、平移Translate四种基本动画,并且通过这四种基本动画的组合使用,可以实现多种交互效果。
View动画使用非常简单,不仅可以通过XML文件来定义动画,同样可以通过Java代码来实现动画过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//xml实现
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0">
</alpha>
Animation alphaAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_anim_alpha);
mTargetView.startAnimation(alphaAnim);
//动态代码实现
public void clickToAlpha(View view) {
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
alphaAnimation.setDuration(2000);
mTargetView.startAnimation(alphaAnimation);
}

帧动画

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!--通过Android动画集播放的八十张图片-->
<item
android:drawable="@mipmap/c_1"
android:duration="50" />
<item
android:drawable="@mipmap/c_2"
android:duration="50" />
<!-- 省略... -->
<item
android:drawable="@mipmap/circle_19"
android:duration="50" />
<item
android:drawable="@mipmap/circle_20"
android:duration="50" />
</animation-list>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="com.ansen.frameanimation.sample.MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/animlist" />
</LinearLayout>
ImageView image = (ImageView) findViewById(R.id.image);
AnimationDrawable animationDrawable = (AnimationDrawable) image.getDrawable();
animationDrawable.start();

场景

  • 1.LayoutAnimation

作用于ViewGroup,比如listView,其item都会有动画

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/left"
android:animationOrder="normal"
android:delay="30%"
android:interpolator="@android:anim/anim_item">
</layoutAnimation>
  • 2.Activity 切换过渡动画
1
2
3
4
5
6
7
8
9
10
Intent intent=new Intent(this,SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
//获取退出时
@override
public void finish(){
super.finish()
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
}

为什么真实改变位置了,而补间动画没有

属性动画

1
2
3
ObjectAnimator.ofFloat(test, View.ALPHA, 0f, 500f)
.setDuration(500)
.start();

原理:属性动画View,需要提供get()/set()方法。

ValueAnimator

插值器和估值器

  • TimeInterpolator 时间插值器,根据时间计算
  • TypeInterpolator 类型估值器

区别

补间动画: 基于View的渐变动画,她只改变了View的绘制效果,而实际属性值未变。

属性动画:通过改变view或者object的属性实现动画是属性动画的最根本的特点。


pv UV: