0.前言
上一篇文章中,我們講解了Android的觸摸事件
有興趣的可以去看一看
準備工作
在讀本文前,你最好有以下準備:
android animation。(1)安裝Android Stuido(以下簡稱AS)
(2)有一定的Java基礎
(3)有一臺安卓機
(可以用模擬器來代替,包括AS自帶的以及網上的一些著名模擬器)
若想要了解有關Java的文章等其他主要知識,可以去看前面的文章
(不會使用AS的讀者可以參考下面這篇文章中的例子)
手機做動畫的app,《[Java]開發安卓,你得掌握的Java知識2》
1.本文內容簡介
關鍵幀動畫
補間動畫
屬性動畫
2.基礎知識講解
安卓動畫,關鍵幀動畫
關鍵幀動畫屬于最無腦,最簡單,又是最費美工功夫的動畫
所謂關鍵幀動畫,就是事先準備好動畫的每一幀的圖片,然后將這些圖片按順序連起來播放,就會達成動畫的效果。如下:
這個動畫就是通過準備好每一幀的火焰動畫,連起來播放形成的
無論是通過xml添加關鍵幀動畫,還是通過java代碼添加關鍵幀動畫,都需要將動畫的每一幀的圖片加載一次
具體如何操作,看第3部分
Android?補間動畫
補間動畫一般分為四個種:
(1)平移translate
(2)縮放 scale
(3)旋轉 rotate
(4)透明度變換 alpha
Android開發的app?注意:補間動畫只是一個效果,沒有真正地改變屬性的值(x與y坐標不變)。它只是一個視覺效果,這會影響到點擊事件的觸發
如:
屬性動畫(ObjectAnimator)
Animator
|----ValueAnimator
|-------ObjectAnimator
android 屬性動畫?|-------TimeAnimator
所有屬性都可以做動畫(包括系統屬性與自定義屬性)
系統屬性:alpha,scale,translation,Rotate(scale和translation只有X和Y和Z)
屬性動畫也一般分為四個種:
(1)平移translate
(2)縮放 scale
安卓手機動畫制作軟件、(3)旋轉 rotate
(4)透明度變換 alpha
注意:屬性動畫不是一個效果,而是確實地改變了控件的對應屬性(其視覺效果和補間動畫一樣)
3.具體操作
準備工作:
把這個地方改成Android,方便操作
安卓做動畫?關鍵幀動畫(xml方法)
第一步 導入動畫的每一幀圖片
把這些圖片拖到drawable文件夾下
第二步 在drawable文件夾下創建xml文件
drawable處右鍵 --> New --> Drawable resource file
File name里面填上名字,其他基本不用管,然后點擊確定
安卓動畫分類?最后會得到:
第三步 把selector改了
將selector改為animation-list
第四步 加載每一幀的圖片(加載所以圖片)
方法:在里面,添加
如:
android加載動畫、先輸入
后面的android:duration表示該圖片在動畫中的持續時間(單位是毫秒)
要將每一張圖片都寫進來
第五步 在layout文件中使用這個動畫
在layout中的activity_main這個xml文件中創建一個ImageView使用這個動畫的xml(為了方便可以改成RelativeLayout)
第六步 在java代碼中啟動動畫(具體代碼下面黑框有)
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()并排)
點擊畫面后,就會有動畫效果了(跟上面一樣,就不放圖了)
關鍵幀動畫(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()啟動動畫
制作Android系統App。補間動畫
補間動畫也有兩種處理方式,一種是通過xml,一種是java代碼
前者適合于一些定死的動畫
后者的話,在java代碼中可以進行計算、表達式書寫等,因此比較靈活
補間動畫(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);
補間動畫(xml文件方法)
第一步 修改項目瀏覽方式
首先將Android改為project
第二步 找到對應文件夾
找到項目名下面的app --> src
找到src --> main --> res
在res文件夾下創建一個anim文件夾
第三步 在anim文件夾上,
右鍵-->New-->Animation resource File,然后起名
第四步 更改set為對應的動畫名字
如將set改為平移動畫
第五步 添加動畫屬性
android:fromYDelta="100"
android:toYDelta="0"
android:fillAfter="true"
android:duration="500">
注意,這些屬性是添加在前面一個標簽的兩個<>中的,而不是添加在兩個標簽中
另外,其他動畫的話就不是translate,而是:
分別對應透明度、縮放、旋轉
第六步 在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);
補間動畫總結:
(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(動畫對象);來開啟動畫
屬性動畫(只能通過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)
如果propertyName中名字寫錯了,會報錯
(3)中的values為具體的值(比如從多少變化為多少),一般第一個參數為初始值,第二個為變化后的值
如果values里面只填一個參數,那么就是“變化到多少”
第二步 通過屬性動畫對象設置別的屬性(如持續時間)
objectAnimator.setDuration(1000);
第三步 開啟動畫
objectAnimator.start();
public void testTranslate(){
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(v_v,"TranslationX",v_v.getTranslationX()+100f);
objectAnimator.setDuration(1000);
objectAnimator.start();
}
全部代碼:
//聲明控件變量
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();
}
3.總結
(1)關鍵幀動畫其實比較少用,重點要掌握補間動畫和屬性動畫
(2)補間動畫只是視覺效果,無論怎么看起來怎么樣,控件的實際位置、大小、透明度等都沒有變化
(3)以上說的例子都是很基礎的動畫,熟練掌握之后,將各種動畫糅合在一起,也可以達成一些不錯的效果
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态