国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android實現(xiàn)仿美團、順豐快遞數據加載效果

2019-10-22 18:18:55
字體:
來源:轉載
供稿:網友

我們都知道在Android中,常見的動畫模式有兩種:一種是幀動畫(Frame Animation),一種是補間動畫(Tween Animation)。幀動畫是提供了一種逐幀播放圖片的動畫方式,播放事先做好的圖像,與gif圖片原理類似,就像是在放電影一樣。補間動畫可以實現(xiàn)View組件的移動、放大、縮小以及漸變等效果。

今天我們主要來模仿一下美團中加載數據時小人奔跑動畫的對話框效果,取個有趣的名字就是Running Man,奔跑吧,兄弟!話不多少,先上效果圖,讓各位大俠看看是不是你想要實現(xiàn)的效果,然后再決定是否往下閱讀,因為做為程序員我們的時間都很寶貴,畢竟還沒有女朋友呢?

(ps:因為技術原因,提供的動態(tài)圖效果不是很明顯,但在手機上運行是非常好的,有興趣的朋友可以下載源碼看看。)

Android,美團,數據加載,順豐快遞

Android,美團,數據加載,順豐快遞

下面講講實現(xiàn)的原理,首先我們在項目的res目錄下新建一下anim文件夾,然后新建一個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 是動畫列表,中間放很多的item 也就是組成幀動畫的圖片,

android:drawable[drawable]//加載Drawable對象

android:duration[long]//每一幀動畫的持續(xù)時間(單位ms)

android:oneshot[boolean]//動畫是否只運行一次,true運行一次,false重復運行

寫好之后我們來看自定義一個對話框,來實現(xiàn)打開對話框時,自動加載奔跑的動畫。見代碼:

/**  * @Description:自定義對話框  * @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);   // 通過ImageView對象拿到背景顯示的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);  } } 

可以看到在代碼中,我們使用到一個imageview.post(Runnable r)方法,因為幀動畫需要不斷的重畫,所以必須在線程中運行,否則只能看到第一幀的效果,這和我們做游戲的原理是一樣的,一個人物的走動,是有線程在控制圖片的不斷重畫。

當然還有另外一個方法也能實現(xiàn):

@Override  public void onWindowFocusChanged(boolean hasFocus) {   // TODO Auto-generated method stub   mAnimation.start();   super.onWindowFocusChanged(hasFocus);  } 

最后就是在Activity中調用了,詳情:

CustomProgressDialog dialog =new CustomProgressDialog(this, "正在加載中",R.anim.frame);   dialog.show();

對于CustomProgressDialog這個自定義對話框類是封裝的比較好的,調用起來十分方便,你可以快速的替換成你想要的效果,只需更改圖片就可以了。

以上就是本篇文章的全部內容,大家在測試后如果還有任何不明白的地方可以在下方的留言區(qū)域導論,感謝你對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 延安市| 孙吴县| 兖州市| 临桂县| 吴旗县| 阳曲县| 阳曲县| 施甸县| 同德县| 丹巴县| 浮梁县| 嘉义县| 化州市| 绥滨县| 霍州市| 哈密市| 旅游| 乌苏市| 白城市| 庆元县| 北京市| 莎车县| 华安县| 景东| 色达县| 平和县| 镇原县| 五莲县| 杭锦旗| 育儿| 依安县| 凤翔县| 昭觉县| 阳西县| 福州市| 尚志市| 禄丰县| 秀山| 辽宁省| 江川县| 改则县|