動畫Animationandroid
有兩種加載方式:ide
一:再res文件夾下的anim文件夾裏面的xml文件中編寫實現(幀動畫得再drawable中寫)佈局
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
</alpha>
</set>
中間部分是相應的動畫名稱:動畫
一共有alpha(透明度),rotate(旋轉),scale(縮放),translate(平移)四種基本的動畫this
二:經過再代碼中用相應的類實現。spa
一樣的相應類的名稱AlphaAnmation, RotateAnmation, ScaleAnmation, TranslateAnmationcode
先給出再xml文件中怎麼樣寫動畫和怎樣調用:xml
透明度動畫:blog
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--透明度動畫 duration:動畫時間 fromAlpha:開始的透明度 toAlpha:結束的透明度--> <alpha android:duration="1000" android:fromAlpha="0.1" android:toAlpha="1.0" > </alpha> </set>
旋轉動畫:three
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--旋轉動畫 duration:動畫時間 fromDegrees:開始的角度 toDegrees:結束的角度 pivotX:旋轉中心X以圖片的寬的百分比位置開始 pivotY:旋轉中心Y以圖片的高的百分比位置開始 interpolator:旋轉動畫的樣式--> <rotate android:duration="1000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="+360" /> </set>
縮放動畫:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--縮放動畫 duration:動畫時間 fillAfter:動畫結束後是否回覆原樣 fromXScale:開始時縮放寬的比例 fromYScale:開始時縮放高的比例 toXScale:結束時縮放寬的比例 toYScale:結束時縮放高的比例 pivotX:以圖片的寬的百分比位置開始 pivotY:以圖片的高的百分比位置開始 interpolator:縮放動畫的樣式,這裏是勻加速--> <scale android:duration="2000" android:fillAfter="false" android:fromXScale="0.0" android:fromYScale="0.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /> </set>
位移動畫:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--透明度動畫 duration:動畫時間 fromXDelta:開始時X位置 fromYDelta:開始時Y位置 toXDelta:結束時Y位置 toYDelta:結束時Y位置 位置都是相對與圖片中心點的相對位置--> <translate android:duration="1000" android:fromXDelta="10" android:fromYDelta="10" android:toXDelta="100" android:toYDelta="100" /> </set>
實現方法:(這裏用圖片加載爲例子)
loadAnimation = AnimationUtils.loadAnimation(this, R.anim.XXX);XXX是動畫的xml文件明
image.startAnimation(loadAnimation);
動態加載也相似:(以透明度爲例子)
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);//構建透明度動畫透明度0.1到1
alphaAnimation.setDuration(100);//動畫時間
image.startAnimation(alphaAnimation);
接下來將一下組合動畫:有兩種組合動畫的方式
第一種:直接再xml文件種這樣寫:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <!--startOffset:延遲多少時間後執行--> <alpha android:duration="3000" android:fromAlpha="0.2" android:toAlpha="1.0" /> <alpha android:duration="3000" android:fromAlpha="1.0" android:startOffset="3000" android:toAlpha="0.2" /> </set>
而後加載這個動畫文件便可
第二種:
//連續1(先位移再旋轉) case R.id.continue_btn: { loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate); final Animation loadAnimation2 = AnimationUtils.loadAnimation(this, R.anim.rotate); image.startAnimation(loadAnimation); //設置動畫監聽器 loadAnimation.setAnimationListener(new AnimationListener() { @Override//動畫開始時回調 public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } @Override//動畫進行時回調 public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override//動畫結束時回調 public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub image.startAnimation(loadAnimation2); } }); break; }
這種方法更靈活
哦隊了除了這種以外,其實再建立動畫類的時候能夠這樣實現重複動畫:
TranslateAnimation translate = new TranslateAnimation(-50, 50, 0, 0); translate.setDuration(1000);//動畫時間 translate.setRepeatCount(Animation.INFINITE);//無限重複 translate.setRepeatMode(Animation.REVERSE);//倒序重複REVERSE 正序重複RESTART image.startAnimation(translate);
咱們再Activity切換的時候也能夠添加切換的動畫效果哦!
咱們只須要用這個方法便可
//第二個Activity退出的動畫,第一個Activity進入的動畫
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
佈局加載子佈局的時候也能夠用到動畫!(以ListView爲例子)
public class ListActivity extends Activity{ private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.list_layout); listView=(ListView) findViewById(R.id.listView); List<String>list=new ArrayList<String>(); for(int i=0;i<20;i++) { list.add("LWJ"+i); } ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); listView.setAdapter(adapter); /** * 佈局動畫控制器 * 生成一個動畫控制器,裏面的參數: * AnimationUtils.loadAnimation(this, R.anim.zoom_in)動畫集合 * 給this當前佈局加載 * R.anim.zoom_in: 動畫 */ LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in)); //子控件加載順序,這裏是順序加載,ORDER_RANDOM隨機加載 lac.setOrder(LayoutAnimationController.ORDER_NORMAL); listView.setLayoutAnimation(lac);//加載佈局動畫 listView.startLayoutAnimation();//開始動畫 } }
最後講一個開頭就說了的幀動畫,注意得再drawable種寫xml文件
直接這樣就能夠調用這個動畫了
image.setImageResource(R.drawable.anim_list);
裏面的參數就是你寫的xml內容以下:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/one" android:duration="500"/> <item android:drawable="@drawable/two" android:duration="500"/> <item android:drawable="@drawable/three" android:duration="500"/> <item android:drawable="@drawable/four" android:duration="500"/> <item android:drawable="@drawable/five" android:duration="500"/> <item android:drawable="@drawable/six" android:duration="500"/> </animation-list>
你執行的時候就會按上面圖片的順序一直切換播放的了。
好告終束了
若是有什麼錯誤,或者我理解錯誤或不當的,懇請你們糾正,謝謝!嘻嘻嘻~