生活随笔
收集整理的這篇文章主要介紹了
Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android動畫之仿美團(tuán)加載數(shù)據(jù)等待時(shí),小人奔跑進(jìn)度動畫對話框(附順豐快遞員奔跑效果)
?
首句依然是那句老話,你懂得!?finddreams?:(http://blog.csdn.net/finddreams/article/details/43194799)。 我們都知道在Android中,常見的動畫模式有兩種:一種是幀動畫(Frame Animation),一種是補(bǔ)間動畫(Tween Animation)。幀動畫是提供了一種逐幀播放圖片的動畫方式,播放事先做好的圖像,與gif圖片原理類似,就像是在放電影一樣。補(bǔ)間動畫可以實(shí)現(xiàn)View組件的移動、放大、縮小以及漸變等效果。 今天我們主要來模仿一下美團(tuán)中加載數(shù)據(jù)時(shí)小人奔跑動畫的對話框效果,取個(gè)有趣的名字就是Running Man,奔跑吧,兄弟!話不多少,先上效果圖,讓各位大俠看看是不是你想要實(shí)現(xiàn)的效果,然后再決定是否往下閱讀,因?yàn)樽鰹槌绦騿T我們的時(shí)間都很寶貴,畢竟還沒有女朋友呢? (ps:因?yàn)榧夹g(shù)原因,提供的動態(tài)圖效果不是很明顯,但在手機(jī)上運(yùn)行是非常好的,有興趣的朋友可以下載源碼看看。) 下面講講實(shí)現(xiàn)的原理,首先我們在項(xiàng)目的res目錄下新建一下anim文件夾,然后新建一個(gè)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]//每一幀動畫的持續(xù)時(shí)間(單位ms)
? ? ?android:oneshot[boolean]//動畫是否只運(yùn)行一次,true運(yùn)行一次,false重復(fù)運(yùn)行 寫好之后我們來看自定義一個(gè)對話框,來實(shí)現(xiàn)打開對話框時(shí),自動加載奔跑的動畫。見代碼:
[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);??????}????}?? ? ? ? ? ?可以看到在代碼中,我們使用到一個(gè)imageview.post(Runnable r)方法,因?yàn)閹瑒赢嬓枰粩嗟闹禺?#xff0c;所以必須在線程中運(yùn)行,否則只能看到第一幀的效果,這和我們做游戲的原理是一樣的,一個(gè)人物的走動,是有線程在控制圖片的不斷重畫。 當(dāng)然還有另外一個(gè)方法也能實(shí)現(xiàn):
[java]?view plain
?copy @Override??????public?void?onWindowFocusChanged(boolean?hasFocus)?{??????????????????mAnimation.start();???????????super.onWindowFocusChanged(hasFocus);??????}?? ? ? ? 最后就是在Activity中調(diào)用了,詳情:
[java]?view plain
?copy CustomProgressDialog?dialog?=new?CustomProgressDialog(this,?"正在加載中",R.anim.frame);??????????dialog.show();?? ? ? ? ? 對于CustomProgressDialog這個(gè)自定義對話框類是封裝的比較好的,調(diào)用起來十分方便,你可以快速的替換成你想要的效果,只需更改圖片就可以了。 最后附上源代碼,還不夠理解的朋友可以下載看看,希望對你有所幫助; http://download.csdn.net/detail/finddreams/8401429
總結(jié)
以上是生活随笔為你收集整理的Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。