android animation,android 4 動畫,[Android]開發App,你得知道這些4——動畫

 2023-10-08 阅读 30 评论 0

摘要:0.前言上一篇文章中,我們講解了Android的觸摸事件有興趣的可以去看一看準備工作在讀本文前,你最好有以下準備:android animation。(1)安裝Android Stuido(以下簡稱AS)(2)有一定的Java基礎(3)有一臺安卓機(可以用模擬器來代替,包括AS自帶的以及網上

0.前言

上一篇文章中,我們講解了Android的觸摸事件

有興趣的可以去看一看

準備工作

在讀本文前,你最好有以下準備:

android animation。(1)安裝Android Stuido(以下簡稱AS)

(2)有一定的Java基礎

(3)有一臺安卓機

(可以用模擬器來代替,包括AS自帶的以及網上的一些著名模擬器)

若想要了解有關Java的文章等其他主要知識,可以去看前面的文章

(不會使用AS的讀者可以參考下面這篇文章中的例子)

手機做動畫的app,《[Java]開發安卓,你得掌握的Java知識2》

f0e63030d200

1.本文內容簡介

關鍵幀動畫

補間動畫

屬性動畫

f0e63030d200

2.基礎知識講解

安卓動畫,關鍵幀動畫

關鍵幀動畫屬于最無腦,最簡單,又是最費美工功夫的動畫

所謂關鍵幀動畫,就是事先準備好動畫的每一幀的圖片,然后將這些圖片按順序連起來播放,就會達成動畫的效果。如下:

f0e63030d200

這個動畫就是通過準備好每一幀的火焰動畫,連起來播放形成的

無論是通過xml添加關鍵幀動畫,還是通過java代碼添加關鍵幀動畫,都需要將動畫的每一幀的圖片加載一次

具體如何操作,看第3部分

f0e63030d200

Android?補間動畫

補間動畫一般分為四個種:

(1)平移translate

(2)縮放 scale

(3)旋轉 rotate

(4)透明度變換 alpha

Android開發的app?注意:補間動畫只是一個效果,沒有真正地改變屬性的值(x與y坐標不變)。它只是一個視覺效果,這會影響到點擊事件的觸發

如:

f0e63030d200

f0e63030d200

屬性動畫(ObjectAnimator)

Animator

|----ValueAnimator

|-------ObjectAnimator

android 屬性動畫?|-------TimeAnimator

所有屬性都可以做動畫(包括系統屬性與自定義屬性)

系統屬性:alpha,scale,translation,Rotate(scale和translation只有X和Y和Z)

屬性動畫也一般分為四個種:

(1)平移translate

(2)縮放 scale

安卓手機動畫制作軟件、(3)旋轉 rotate

(4)透明度變換 alpha

注意:屬性動畫不是一個效果,而是確實地改變了控件的對應屬性(其視覺效果和補間動畫一樣)

f0e63030d200

f0e63030d200

3.具體操作

準備工作:

f0e63030d200

把這個地方改成Android,方便操作

安卓做動畫?關鍵幀動畫(xml方法)

第一步 導入動畫的每一幀圖片

f0e63030d200

把這些圖片拖到drawable文件夾下

f0e63030d200

f0e63030d200

第二步 在drawable文件夾下創建xml文件

drawable處右鍵 --> New --> Drawable resource file

f0e63030d200

File name里面填上名字,其他基本不用管,然后點擊確定

f0e63030d200

安卓動畫分類?最后會得到:

f0e63030d200

f0e63030d200

第三步 把selector改了

將selector改為animation-list

f0e63030d200

f0e63030d200

第四步 加載每一幀的圖片(加載所以圖片)

方法:在里面,添加

如:

android加載動畫、先輸入

后面的android:duration表示該圖片在動畫中的持續時間(單位是毫秒)

要將每一張圖片都寫進來

f0e63030d200

f0e63030d200

第五步 在layout文件中使用這個動畫

在layout中的activity_main這個xml文件中創建一個ImageView使用這個動畫的xml(為了方便可以改成RelativeLayout)

f0e63030d200

f0e63030d200

f0e63030d200

第六步 在java代碼中啟動動畫(具體代碼下面黑框有)

f0e63030d200

android三種動畫區別。在java文件夾中的MainActivity文件中,找到上面的那個ImageView

ImageView iv = findViewById(R.id.iv_animation);

然后創建onTouchEvent(對控件添加監聽器也行,這里直接對整個界面添加點擊事件)

通過id找到這個ImageView后,

AnimationDrawable anim = (AnimationDrawable) iv.getDrawable();

最后啟動動畫anim.start();

AndroidApp,@Override

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

//1.獲取動畫的控件

ImageView iv = findViewById(R.id.iv_animation);

//2.通過控件獲取動畫

布丁動畫app下載、AnimationDrawable anim = (AnimationDrawable) iv.getDrawable();

//3.啟動動畫

anim.start();

}

return true;

}

安卓做動畫的軟件?(onTouchEvent記得寫在onCreate()外面,即與onCreate()并排)

點擊畫面后,就會有動畫效果了(跟上面一樣,就不放圖了)

f0e63030d200

關鍵幀動畫(java代碼方法)

//(1)創建一個動畫資源(AnimationDrawable)

AnimationDrawable anim = new AnimationDrawable();

//(2)添加每一幀的動畫

android動畫框架、int[] resID = {R.drawable.campfire01,R.drawable.campfire02,R.drawable.campfire03,R.drawable.campfire04,R.drawable.campfire05,R.drawable.campfire06

,R.drawable.campfire07,R.drawable.campfire08,R.drawable.campfire09,R.drawable.campfire10,R.drawable.campfire11,R.drawable.campfire12,R.drawable.campfire13

,R.drawable.campfire14,R.drawable.campfire15,R.drawable.campfire16,R.drawable.campfire17};

for (int i = 0; i < 16; i++) {

anim.addFrame(getResources().getDrawable(resID[i],null),100);

}

全部免費動畫app?//(3)使用這個動畫資源

ImageView iv = findViewById(R.id.iv_animation);

iv.setImageDrawable(anim);

//(4)啟動動畫

anim.start();

這里大概說一下思路

Android安裝、(因為關鍵幀動畫用得不多,畢竟很費美工功夫)

(1)先創建一個AnimationDrawable對象anim

(2)用一個數組將drawable里面的每一幀動畫都裝進去

(3) anim.addFrame()來加載每一幀圖片

(4)創建一個新的ImageView控件,設置它的ImageDrawable為上面那個anim

(5)anim.start()啟動動畫

f0e63030d200

制作Android系統App。補間動畫

補間動畫也有兩種處理方式,一種是通過xml,一種是java代碼

前者適合于一些定死的動畫

后者的話,在java代碼中可以進行計算、表達式書寫等,因此比較靈活

f0e63030d200

補間動畫(java代碼方式)

第一步 先通過id找到對應控件

ImageView rightArm = findViewById(R.id.iv_right_arm);

(記得現在xml里面添加id,不知道如何添加的同學,可以去看以前的文章)

第二步 創建(對應的)動畫的對象

RotateAnimation rightRoAnimation = new RotateAnimation(0,180,0f,0f);

如果是平移,則使用TranslateAnimation

調整透明度用AlphaAnimation

縮放變化用ScaleAnimation

如:

TranslateAnimation tr = new TranslateAnimation(0,100,0,100);

每一種變化的參數都是不一樣的,可以通過alt+p來確認參數

第三步 設置動畫屬性

rightRoAnimation.setDuration(1000);

rightRoAnimation.setFillAfter(true);

setDuration指設置動畫演出持續時間

setFillAfter指設置動畫結束后,控件是否停留在結束的地方(為真時,則停留),畢竟補間動畫不會真正改變控件的屬性

第四步 開始動畫

rightArm.startAnimation(rightRoAnimation);

(這一步可以考慮放在onTouchEvent里面,這樣子就可以點擊的時候觸發一次動畫)

ImageView rightArm = findViewById(R.id.iv_right_arm);

RotateAnimation rightRoAnimation = new RotateAnimation(0,180,0f,0f);

rightRoAnimation.setDuration(1000);

rightRoAnimation.setFillAfter(true);

rightArm.startAnimation(rightRoAnimation);

f0e63030d200

補間動畫(xml文件方法)

第一步 修改項目瀏覽方式

首先將Android改為project

f0e63030d200

f0e63030d200

f0e63030d200

第二步 找到對應文件夾

找到項目名下面的app --> src

f0e63030d200

找到src --> main --> res

在res文件夾下創建一個anim文件夾

f0e63030d200

f0e63030d200

f0e63030d200

第三步 在anim文件夾上,

右鍵-->New-->Animation resource File,然后起名

f0e63030d200

f0e63030d200

f0e63030d200

f0e63030d200

第四步 更改set為對應的動畫名字

如將set改為平移動畫

f0e63030d200

第五步 添加動畫屬性

android:fromYDelta="100"

android:toYDelta="0"

android:fillAfter="true"

android:duration="500">

注意,這些屬性是添加在前面一個標簽的兩個<>中的,而不是添加在兩個標簽中

另外,其他動畫的話就不是translate,而是:

分別對應透明度、縮放、旋轉

f0e63030d200

第六步 在java代碼中加載xml文件中的補間動畫

//(1)創建ImageView對象

ImageView leftHand = findViewById(R.id.iv_left_hand);

ImageView rightHand = findViewById(R.id.iv_right_hand);

//(2)通過AnimationUtils創建對應的動畫對象

TranslateAnimation up = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.hand_up_anim);

//(3)通過AnimationUtils創建對應的動畫對象

leftHand.startAnimation(up);

rightHand.startAnimation(up);

f0e63030d200

補間動畫總結:

(1)java代碼方式(靈活一些)

①創建動畫對象(構造函數里設置基礎屬性)

②通過動畫對象的setXXX()來設置一些其他屬性(如setDuration())

③通過id(等方法)找到控件,然后startAnimation(動畫對象);來開啟動畫

(2)xml方式(死板一些,但是便于多次調用)

①在對應的地方(app-->src-->main-->res)中創建anim文件夾,然后在anim文件夾中,創建Animation resource File(xml文件)

②把set改為對應動畫名字(當然如果是多個動畫,可以把set保留,然后在set里面寫多個不同的動畫標簽)

③在前一個標簽里面添加屬性

④在MainActivity中,通過AnimationUtils創建對應的動畫對象

⑤通過id(等方法)找到控件,然后startAnimation(動畫對象);來開啟動畫

f0e63030d200

屬性動畫(只能通過java代碼)

第一步 在MainActivity中創建屬性動畫對象

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(參數);

ofFloat還是ofDouble什么的,看改變的屬性的參數的類型,上面講的那些系統提供的屬性(平移、縮放等),參數都是float類型的

特別注意:ofFloat()的括號內的參數的順序為:

target、propertyName、......values

(1)target需要動畫的控件

(2)propertyName 動畫的哪個屬性(這個可以通過控件.get動畫名(),因為控件必須實現動畫名的getter,setter

(3)...values 變化的值

注意:

(2)里面的意思是,可以先輸入控件對象,然后輸入一個點".",然后輸入對應set+動畫的前面一部分,就可以看到完整的名字了,這個名字,就是propertyName需要填寫的

比如需要scale方面的,就那么,propertyName中就寫"ScaleX"或者"ScaleY"(必須打上引號,這個參數是String)

f0e63030d200

如果propertyName中名字寫錯了,會報錯

(3)中的values為具體的值(比如從多少變化為多少),一般第一個參數為初始值,第二個為變化后的值

如果values里面只填一個參數,那么就是“變化到多少”

f0e63030d200

第二步 通過屬性動畫對象設置別的屬性(如持續時間)

objectAnimator.setDuration(1000);

f0e63030d200

第三步 開啟動畫

objectAnimator.start();

public void testTranslate(){

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(v_v,"TranslationX",v_v.getTranslationX()+100f);

objectAnimator.setDuration(1000);

objectAnimator.start();

}

f0e63030d200

全部代碼:

//聲明控件變量

private View v_v;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//通過findViewById找到對應控件

v_v = findViewById(R.id.v_v);

//為控件添加監聽器

v_v.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

testTranslate();

}

});

}

/*

* 這是一個平移的屬性的動畫

*/

public void testTranslate(){

//ofFloat()中的參數意思:v_v為控件名

//"TranslationX"為動畫名(必須帶引號)

//v_v.getTranslationX()+100f為移動到哪里(這么寫是為了可以每次點擊都能繼續移動)

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(v_v,"TranslationX",v_v.getTranslationX()+100f);

objectAnimator.setDuration(1000);

objectAnimator.start();

}

f0e63030d200

f0e63030d200

3.總結

(1)關鍵幀動畫其實比較少用,重點要掌握補間動畫和屬性動畫

(2)補間動畫只是視覺效果,無論怎么看起來怎么樣,控件的實際位置、大小、透明度等都沒有變化

(3)以上說的例子都是很基礎的動畫,熟練掌握之后,將各種動畫糅合在一起,也可以達成一些不錯的效果

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/129691.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息