Android實(shí)現(xiàn)仿美團(tuán)、順豐快遞數(shù)據(jù)加載效果
我們都知道在Android中,常見的動(dòng)畫模式有兩種:一種是幀動(dòng)畫(Frame Animation),一種是補(bǔ)間動(dòng)畫(Tween Animation)。幀動(dòng)畫是提供了一種逐幀播放圖片的動(dòng)畫方式,播放事先做好的圖像,與gif圖片原理類似,就像是在放電影一樣。補(bǔ)間動(dòng)畫可以實(shí)現(xiàn)View組件的移動(dòng)、放大、縮小以及漸變等效果。
今天我們主要來(lái)模仿一下美團(tuán)中加載數(shù)據(jù)時(shí)小人奔跑動(dòng)畫的對(duì)話框效果,取個(gè)有趣的名字就是Running Man,奔跑吧,兄弟!話不多少,先上效果圖,讓各位大俠看看是不是你想要實(shí)現(xiàn)的效果,然后再?zèng)Q定是否往下閱讀,因?yàn)樽鰹槌绦騿T我們的時(shí)間都很寶貴,畢竟還沒有女朋友呢?
(ps:因?yàn)榧夹g(shù)原因,提供的動(dòng)態(tài)圖效果不是很明顯,但在手機(jī)上運(yùn)行是非常好的,有興趣的朋友可以下載源碼看看。)


下面講講實(shí)現(xiàn)的原理,首先我們?cè)陧?xiàng)目的res目錄下新建一下anim文件夾,然后新建一個(gè)xml文件,添加如下代碼:
<?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 是動(dòng)畫列表,中間放很多的item 也就是組成幀動(dòng)畫的圖片,
android:drawable[drawable]//加載Drawable對(duì)象
android:duration[long]//每一幀動(dòng)畫的持續(xù)時(shí)間(單位ms)
android:oneshot[boolean]//動(dòng)畫是否只運(yùn)行一次,true運(yùn)行一次,false重復(fù)運(yùn)行
寫好之后我們來(lái)看自定義一個(gè)對(duì)話框,來(lái)實(shí)現(xiàn)打開對(duì)話框時(shí),自動(dòng)加載奔跑的動(dòng)畫。見代碼:
/**
* @Description:自定義對(duì)話框
* @author http://blog.csdn.net/finddreams
*/
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);
// 通過(guò)ImageView對(duì)象拿到背景顯示的AnimationDrawable
mAnimation = (AnimationDrawable) mImageView.getBackground();
// 為了防止在onCreate方法中只顯示第一幀的解決方案之一
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)閹瑒?dòng)畫需要不斷的重畫,所以必須在線程中運(yùn)行,否則只能看到第一幀的效果,這和我們做游戲的原理是一樣的,一個(gè)人物的走動(dòng),是有線程在控制圖片的不斷重畫。
當(dāng)然還有另外一個(gè)方法也能實(shí)現(xiàn):
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
mAnimation.start();
super.onWindowFocusChanged(hasFocus);
}
最后就是在Activity中調(diào)用了,詳情:
CustomProgressDialog dialog =new CustomProgressDialog(this, "正在加載中",R.anim.frame); dialog.show();
對(duì)于CustomProgressDialog這個(gè)自定義對(duì)話框類是封裝的比較好的,調(diào)用起來(lái)十分方便,你可以快速的替換成你想要的效果,只需更改圖片就可以了。
以上就是本篇文章的全部?jī)?nèi)容,大家在測(cè)試后如果還有任何不明白的地方可以在下方的留言區(qū)域?qū)д?,感謝你對(duì)腳本之家的支持。
- Android快遞物流信息布局開發(fā)
- Android實(shí)現(xiàn)快遞單號(hào)查詢快遞狀態(tài)信息
- Android自定義view仿淘寶快遞物流信息時(shí)間軸
- Android實(shí)現(xiàn)快遞物流時(shí)間軸效果
- android實(shí)現(xiàn)快遞跟蹤進(jìn)度條
- Android實(shí)現(xiàn)快遞物流跟蹤布局效果
- Android使用http請(qǐng)求手機(jī)號(hào)碼歸屬地查詢代碼分享
- Android編程實(shí)現(xiàn)號(hào)碼歸屬地查詢的方法
- kotlin實(shí)現(xiàn)快遞與號(hào)碼歸屬地查詢案例詳解
相關(guān)文章
Android 防止過(guò)快(多次)點(diǎn)擊的實(shí)現(xiàn)方法
很多用戶經(jīng)常會(huì)出現(xiàn)過(guò)快且多次點(diǎn)擊同一按鈕的情況,本篇文章主要介紹了Android 防止過(guò)快點(diǎn)擊的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Android使用setContentView實(shí)現(xiàn)頁(yè)面的轉(zhuǎn)換效果
這篇文章主要介紹了Android如何使用setContentView實(shí)現(xiàn)頁(yè)面的轉(zhuǎn)換效果,幫助大家更好的利用Android進(jìn)行開發(fā),感興趣的朋友可以了解下2021-01-01
Android實(shí)現(xiàn)手機(jī)震動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手機(jī)震動(dòng)效果的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02
Android實(shí)現(xiàn)ViewPager無(wú)限循環(huán)效果(一)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)ViewPager無(wú)限循環(huán)效果的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android實(shí)現(xiàn)圖片加載進(jìn)度提示
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片加載進(jìn)度提示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可復(fù)用的選擇頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06

