Android動畫之仿美團加載數據等待時,小人奔跑進度動畫對話框(附順豐快遞員奔跑效果)
?
首句依然是那句老話,你懂得!?finddreams?:(http://blog.csdn.net/finddreams/article/details/43194799)。 我們都知道在Android中,常見的動畫模式有兩種:一種是幀動畫(Frame Animation),一種是補間動畫(Tween Animation)。幀動畫是提供了一種逐幀播放圖片的動畫方式,播放事先做好的圖像,與gif圖片原理類似,就像是在放電影一樣。補間動畫可以實現View組件的移動、放大、縮小以及漸變等效果。 今天我們主要來模仿一下美團中加載數據時小人奔跑動畫的對話框效果,取個有趣的名字就是Running Man,奔跑吧,兄弟!話不多少,先上效果圖,讓各位大俠看看是不是你想要實現的效果,然后再決定是否往下閱讀,因為做為程序員我們的時間都很寶貴,畢竟還沒有女朋友呢? (ps:因為技術原因,提供的動態圖效果不是很明顯,但在手機上運行是非常好的,有興趣的朋友可以下載源碼看看。) 下面講講實現的原理,首先我們在項目的res目錄下新建一下anim文件夾,然后新建一個xml文件,添加如下代碼:
[html]?view plain
?copy <?xml?version="1.0"?encoding="utf-8"?>??<animation-list?xmlns:android="http://schemas.android.com/apk/res/android"??????android:oneshot="false"?>????????<item??????????android:drawable="@drawable/app_loading0"??????????android:duration="150"/>??????<item??????????android:drawable="@drawable/app_loading1"??????????android:duration="150"/>????</animation-list>?? ? animation-list 是動畫列表,中間放很多的item 也就是組成幀動畫的圖片, android:drawable[drawable]//加載Drawable對象 android:duration[long]//每一幀動畫的持續時間(單位ms)
? ? ?android:oneshot[boolean]//動畫是否只運行一次,true運行一次,false重復運行 寫好之后我們來看自定義一個對話框,來實現打開對話框時,自動加載奔跑的動畫。見代碼:
[java]?view plain
?copy public?class?CustomProgressDialog?extends?ProgressDialog?{????????private?AnimationDrawable?mAnimation;??????private?Context?mContext;??????private?ImageView?mImageView;??????private?String?mLoadingTip;??????private?TextView?mLoadingTv;??????private?int?count?=?0;??????private?String?oldLoadingTip;??????private?int?mResid;????????public?CustomProgressDialog(Context?context,?String?content,?int?id)?{??????????super(context);??????????this.mContext?=?context;??????????this.mLoadingTip?=?content;??????????this.mResid?=?id;??????????setCanceledOnTouchOutside(true);??????}????????@Override??????protected?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??????????initView();??????????initData();??????}????????private?void?initData()?{????????????mImageView.setBackgroundResource(mResid);??????????????????mAnimation?=?(AnimationDrawable)?mImageView.getBackground();??????????????????mImageView.post(new?Runnable()?{??????????????@Override??????????????public?void?run()?{??????????????????mAnimation.start();????????????????}??????????});??????????mLoadingTv.setText(mLoadingTip);????????}????????public?void?setContent(String?str)?{??????????mLoadingTv.setText(str);??????}????????private?void?initView()?{??????????setContentView(R.layout.progress_dialog);??????????mLoadingTv?=?(TextView)?findViewById(R.id.loadingTv);??????????mImageView?=?(ImageView)?findViewById(R.id.loadingIv);??????}????}?? ? ? ? ? ?可以看到在代碼中,我們使用到一個imageview.post(Runnable r)方法,因為幀動畫需要不斷的重畫,所以必須在線程中運行,否則只能看到第一幀的效果,這和我們做游戲的原理是一樣的,一個人物的走動,是有線程在控制圖片的不斷重畫。 當然還有另外一個方法也能實現:
[java]?view plain
?copy @Override??????public?void?onWindowFocusChanged(boolean?hasFocus)?{??????????????????mAnimation.start();???????????super.onWindowFocusChanged(hasFocus);??????}?? ? ? ? 最后就是在Activity中調用了,詳情:
[java]?view plain
?copy CustomProgressDialog?dialog?=new?CustomProgressDialog(this,?"正在加載中",R.anim.frame);??????????dialog.show();?? ? ? ? ? 對于CustomProgressDialog這個自定義對話框類是封裝的比較好的,調用起來十分方便,你可以快速的替換成你想要的效果,只需更改圖片就可以了。 最后附上源代碼,還不夠理解的朋友可以下載看看,希望對你有所幫助; http://download.csdn.net/detail/finddreams/8401429
總結
以上是生活随笔為你收集整理的Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。