Android学习之动画基础
一:逐帧动画
1、效果展示
逐帧动画是以图片为基础的,通过AniamtionDrawable来实现的,如上图所示。
2、实现步骤
1)、通过animation-lis建立帧动画xml文件
<?xml version="1.0" encoding="utf-8"?><animation-listxmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/frame_1"
android:duration="300"/>
<item
android:drawable="@drawable/frame_2"
android:duration="300"/>
<item
android:drawable="@drawable/frame_3"
android:duration="300"/>
</animation-list>
2)、给需要实现动画的View设置背景
<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<View
android:id="@+id/view"
android:background="@drawable/loading"
android:layout_centerInParent="true"
android:layout_width="300dp"
android:layout_height="300dp"/>
<LinearLayout
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btnStart"
android:text="start"
android:onClick="onClick"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnStop"
android:text="stop"
android:onClick="onClick"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
3)、通过AnimationDrawable开始或者停止帧动画
publicclassMainActivityextendsAppCompatActivity{private AnimationDrawable animationDrawable;
@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frame_animation);
View view = findViewById(R.id.view);
animationDrawable = (AnimationDrawable) view.getBackground();
}
publicvoidonClick(View v){
switch (v.getId()) {
case R.id.btnStart:
animationDrawable.start();
break;
case R.id.btnStop:
animationDrawable.stop();
break;
}
}
}
二:视图动画
和逐帧动画不同,视图动画操作的是Android中的视图,如文本框、按钮和ImageView等。视图动画主要有透明度动画、缩放动画、位移动画、旋转动画和集合动画。
1、透明度动画
1)、透明度动画效果展示
2)、透明度动画实现
透明度动画是通过alpha标签实现的。
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="1000" />
</set>
Animation alphaAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);v.startAnimation(alphaAnimation);
2、缩放动画
1)、缩放动画效果展示
2)、缩放动画实现
透明度动画是通过scale标签实现的,其中pivotx和pivoty是基准点的意思。
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000">
<scale
android:fromXScale="1.0"
android:toXScale="0.75"
android:fromYScale="1.0"
android:toYScale="0.5"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);v.startAnimation(scaleAnimation);
3、位移动画
1)、位移动画效果展示
2)、位移动画实现
位移动画是通过translate标签实现的,android:toXDelta="50%p"的意思是移动到其父布局的50%处。
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000">
<translate
android:fromXDelta="0"
android:toXDelta="50%p"
android:fromYDelta="0"
android:toYDelta="0"/>
</set>
Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);v.startAnimation(translateAnimation);
4、旋转动画
1)、旋转动画效果展示
2)、旋转动画实现
位移动画是通过rotate标签实现的,repeatCount是指动画执行次数,repeatMode是指动画执行方式。
<?xml version="1.0" encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000">
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:repeatCount="infinite"/>
</set>
Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);v.startAnimation(rotateAnimation);
三:属性动画
属性动画可以操作任意对象,动画的本质就是给一个初始值,给一个结束指,如果能够从初始值平滑的变到结束值,那这就是一个动画系统。视图变化并没有真正的改变View的属性,再动画完成后,view的高度和宽度并没有变化,但是属性动画是可以真正改变属性的。属性动画能定义的动画属性包括时长、时间插值器(动画的速度)、重复次数以及重复模式、动画集和延迟。这里就以动画集来演示
1、动画集
1)、动画集效果展示
2)、动画集实现
第一种实现方式
// 旋转动画Animator rotateAnimator = ObjectAnimator.ofFloat(view, "rotation", 0, 720);
rotateAnimator.setDuration(1000);
// 平移动画
Animator moveAnimator = ObjectAnimator.ofFloat(view, "x", 0, 500);
moveAnimator.setDuration(1000);
AnimatorSet set = new AnimatorSet();
// 同时执行
set.playTogether(rotateAnimator, moveAnimator);
set.start();
第二种实现方式
// 旋转动画view.animate().rotation(720).setDuration(1000).start();
// 平移动画
view.animate().translationX(500).setDuration(1000).start();
三:小结
1、什么时候使用逐帧动画?
逐帧动画是建立在图片的基础上的,应用范围比较小,某些App在启动页的时候会使用逐帧动画来实现一种轮播效果。
2、视图动画和属性动画有什么区别?
视图动画只能让视图产生动画效果,属性动画则更为强大,一切通过视图动画系统能够实现的效果都能通过属性动画实现,而且属性动画会真实的去修改这个视图的属性。
以上是 Android学习之动画基础 的全部内容, 来源链接: utcz.com/a/19452.html