一、前言:
1.三种动画的介绍
现在 Android 常用的动画有三种: 逐帧动画,补间动画和属性动画;
FrameAnimation(逐帧动画):将多张图片组合起来进行播放,很多 App 的加载动画是采用这种方式(如:美团,去哪儿)。
TweenAnimation(补间动画):补间动画由 Animation 类来实现具体效果,包括平移(TranslateAnimation)、缩放(ScaleAnimation)、旋转(RotateAnimation)、透明度(AlphaAnimation)四个子类,四种变化,但补间动画只是达到了其视觉效果,并不是真正的位置上的变化。(属性动画出来之后,补间动画就不那么常用了)。
PropertyAnimation(属性动画):最为强大的动画,弥补了补间动画的缺点,实现位置+视觉的变化。下面重点讲解属性动画:
2.PropertyAnimation(属性动画)实例
下面是一个类似弹幕的例子,弹幕从最右边划入,滑到中间停留一下,从最左边划出(做 gif 动图不会。。所以先看下截图)
(demo下载地址 https://download.csdn.net/download/wuqingsen1/10644093):
图片3.png首先初始化两个 ObjectAnimator 和一个 AnimatorSet ,其次利用组合动画来实现,代码如下:
public class MainActivity extends AppCompatActivity {
private TextView tv_show;
private AnimatorSet set = new AnimatorSet();
private ObjectAnimator animator1;
private ObjectAnimator animator2;
private LinearLayout ll_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_show = findViewById(R.id.tv_show);
ll_login = findViewById(R.id.ll_login);
tv_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ll_login.setVisibility(View.VISIBLE);
//第一个动画 animator1 和第二个动画 animator2
animator1 = ObjectAnimator.ofFloat(ll_login, "translationX", 800, 0, 0);
animator2 = ObjectAnimator.ofFloat(ll_login, "translationX", 0, -800, -800);
//先执行第一个动画,再执行第二个动画
set.play(animator1).before(animator2);
set.setDuration(3000);
set.start();
}
});
}
}
3.FrameAnimation(逐帧动画)实例
下面是三张图片来回切换的例子
(demo下载地址为https://download.csdn.net/download/wuqingsen1/10644237 ):
图片4.png建一个名字为 zhuzhen 的 xml 文件,里面内容为:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<!-- animation-list 帧动画 -->
<!-- android:oneshot的值为 false代表播放多次,true代表只播放一次 -->
<!-- duration代表每张图片的播放时间 ,定义一个持续时间为50毫秒的动画帧 -->
<item
android:drawable="@drawable/img00"
android:duration="200"/>
<item
android:drawable="@drawable/img01"
android:duration="200"/>
<item
android:drawable="@drawable/img02"
android:duration="200"/>
</animation-list>
代码中设置:
public class MainActivity extends AppCompatActivity {
private ImageView iv_zhuzhen;
private AnimationDrawable animationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_zhuzhen = findViewById(R.id.iv_zhuzhen);
// 把动画资源设置为imageView的背景,也可直接在XML里面设置
iv_zhuzhen.setBackgroundResource(R.drawable.zhuzhen);
animationDrawable = (AnimationDrawable) iv_zhuzhen.getBackground();
if (animationDrawable != null && !animationDrawable.isRunning()) {
animationDrawable.start();//动画开始
}
}
}
网友评论