日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android属性动画替换逐帧动画,Android 动画:逐帧动画,补间动画和属性动画

發布時間:2023/12/29 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 动画:逐帧动画,补间动画和属性动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。