android属性动画替换逐帧动画,Android 动画:逐帧动画,补间动画和属性动画
1.三種動畫的介紹
現在 Android 常用的動畫有三種:?逐幀動畫,補間動畫和屬性動畫;
FrameAnimation(逐幀動畫):將多張圖片組合起來進行播放,很多 App 的加載動畫是采用這種方式(如:美團,去哪兒)。
TweenAnimation(補間動畫):補間動畫由 Animation 類來實現具體效果,包括平移(TranslateAnimation)、縮放(ScaleAnimation)、旋轉(RotateAnimation)、透明度(AlphaAnimation)四個子類,四種變化,但補間動畫只是達到了其視覺效果,并不是真正的位置上的變化。(屬性動畫出來之后,補間動畫就不那么常用了)。
PropertyAnimation(屬性動畫):最為強大的動畫,彌補了補間動畫的缺點,實現位置+視覺的變化。下面重點講解屬性動畫:
動畫名稱
描述
注釋
代碼實例
透明度
透明度由0~1表示。
0表示完全透明,
1表示不透明
view:執行動畫的View;
"alpha":表示透明動畫;
1f:起始透明度;
0f:動畫結束后的透明度;
//變為透明,
//動畫時間為兩秒并開始
ObjectAnimator animator =
ObjectAnimator.ofFloat(view, "alpha", 0f);
animator.setDuration(2000);
animator.start();
旋轉
下個度數大于上個度數,
順時針旋轉;
下個度數小于上個度數,
逆時針旋轉。
view:執行動畫的View;
"rotation":表示旋轉動畫
0f?=>?360f?,順時針;
360f?=>?0f,逆時針;
//先順時針,再逆時針,
//動畫時間為兩秒并開始
ObjectAnimator animator =
ObjectAnimator.ofFloat(view, "rotation", 0f,360f, 0f);
animator.setDuration(2000);
animator.start();
移動
translationX:
下個位置大于上個上個位置時,
向右移動,反之向左移動;
translationY:
下個位置大于上個上個位置時,
向下移動,反之向上移動。
view:執行動畫的View;
"translationX":在x軸移動
"translationY":在y軸移動
translationX:
0f=>?-300f,向左;
-300f=>?0f,向右。
//先向左移動,再向右移動,
//動畫時間為兩秒并開始
ObjectAnimator animator =
ObjectAnimator.ofFloat(view, "translationX", 0f, -300f, 0f);
animator.setDuration(2000);
animator.start();
縮放
后面的參數表示倍數,
1f表示原來的大小,以此推類:
2f表示兩倍、3f表示三倍
view:執行動畫的View;
“scaleX”:沿x軸縮放
"scaleY":沿y軸縮放
//先沿x軸放大兩倍,再縮小回去,
//動畫時間為兩秒并開始
ObjectAnimator animator =
ObjectAnimator.ofFloat(view, "scaleX", 1f, 2f, 1f);
animator.setDuration(2000);
animator.start();
組合動畫
類AnimatorSet,
專門來組合這些動畫。
after(Animator anim) :
將現有動畫插入到傳入的動畫之后執行
after(long delay) :
將現有動畫延遲指定毫秒后執行
before(Animator anim):
將現有動畫插入到傳入的動畫之前執行
with(Animator anim) :
將現有動畫和傳入的動畫同時執行
ObjectAnimator animator1 =
ObjectAnimator.ofFloat(view, "translationX", 600, 0, 0);
ObjectAnimator animator2 =
ObjectAnimator.ofFloat(view, "translationX", 0, -600, -600);
AnimatorSet set = new AnimatorSet();
set.play(animator1).before(animator2);
set.setDuration(3000);
set.start();
2.PropertyAnimation(屬性動畫)實例
下面是一個類似彈幕的例子,彈幕從最右邊劃入,滑到中間停留一下,從最左邊劃出(做?gif 動圖不會。。所以先看下截圖)
(demo下載地址 https://download..net/download/wuqingsen1/10644093):
首先初始化兩個?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(逐幀動畫)實例
下面是三張圖片來回切換的例子(做?gif 動圖不會。。所以先看下截圖)
(demo下載地址為https://download..net/download/wuqingsen1/10644237 ):
建一個名字為 zhuzhen 的 xml 文件,里面內容為:
android:oneshot="false" >
android:drawable="@drawable/img00"
android:duration="200"/>
android:drawable="@drawable/img01"
android:duration="200"/>
android:drawable="@drawable/img02"
android:duration="200"/>
代碼中設置:
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();//動畫開始
}
}
}
更多好內容戳下面:
https://blog..net/wuqingsen1
總結
以上是生活随笔為你收集整理的android属性动画替换逐帧动画,Android 动画:逐帧动画,补间动画和属性动画的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片轮播php代码下载,jQuery带进
- 下一篇: Java播放歌词同步源码,Android