好看的Dialog加載動畫

  做開發的時候,爲了讓用戶體驗比較好一點,app啓動的時候會有一個啓動歡迎頁,那麼進入到app以後,用戶瀏覽頁面,首先會進行網絡請求,然後服務器響應數據回來,最後展示到頁面上,用戶才能看到豐富的頁面。那麼問題就來了,用戶的網絡有2G、3G、4G,現在一般是4G,但是用戶的網絡是不一樣的,有些地方網絡好,有些比較慢,加載網絡數據的時候,網絡太慢了就會顯示一篇空白,這給用戶的體驗是非常不好的,所以就到了本節的內容,加載網絡數據並且數據還會返回的時候給用戶顯示一個Loading動畫,當然,android自帶的有,這裏我們自定義一個Load動畫。

首先我們來看一下效果圖:

這裏寫圖片描述

下面我們來看一下代碼部分,首先是自定義的SysLoading.java

public class SysLoading extends LinearLayout{
	
	private View view;
	//自定義動畫
	private AnimationDrawable mAnimation;
	//加載失敗視圖
	private RelativeLayout sys_loading_dialog_fail;
	//加載中圖片
	private ImageView sys_loading_dialog_img;
	//加載中文本
	private TextView sys_loading_dialog_tv;
	//加載失敗文本
	private TextView sys_loading_dialog_fail_tv;
	//加載時文本
	private String loadingText;

	public SysLoading(Context context) {
		super(context);
	}
	
	public SysLoading(Context context, AttributeSet attrs) {
		super(context, attrs);
		LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = layoutInflater.inflate(R.layout.sys_loading_dialog, this);
		//加載失敗視圖
		sys_loading_dialog_fail = (RelativeLayout) view.findViewById(R.id.sys_loading_dialog_fail);
		//加載時圖片
		sys_loading_dialog_img = (ImageView) view.findViewById(R.id.sys_loading_dialog_img);
		//加載時文本
		sys_loading_dialog_tv = (TextView) view.findViewById(R.id.sys_loading_dialog_tv);
		sys_loading_dialog_fail_tv = (TextView) view.findViewById(R.id.sys_loading_dialog_fail_tv);
	}
	
	public void showAnim(String loadingText){
		this.loadingText = loadingText;
		//設置動畫特效
		initData();
	}
	
	
	public void stopAnim(){
		mAnimation.stop();
	}
	
	
	
	
	
	
	public void initData() {
		//設置文本
		sys_loading_dialog_tv.setText(loadingText);
		//設置顯示
		view.setVisibility(View.VISIBLE);
		//設置加載時圖片顯示
		sys_loading_dialog_img.setVisibility(View.VISIBLE);
		//設置加載時文本顯示
		sys_loading_dialog_tv.setVisibility(View.VISIBLE);
		//設置失敗視圖隱藏
		sys_loading_dialog_fail.setVisibility(View.GONE);
		//獲取動畫
		sys_loading_dialog_img.setBackgroundResource(R.drawable.sys_loading);
		//通過ImageView拿到AnimationDrawable
		mAnimation = (AnimationDrawable) sys_loading_dialog_img.getBackground();
		//爲了防止只顯示第一幀
		sys_loading_dialog_img.post(new Runnable() {
			@Override
			public void run() {
				mAnimation.start();
			}
		});
	}

	//加載失敗調用的方法
	public void fialLoad(String failStr, View.OnClickListener listener){
		//動畫停止
		if(null != mAnimation && mAnimation.isRunning()){
			mAnimation.stop();
		}
		//失敗視圖顯示
		sys_loading_dialog_fail.setVisibility(View.VISIBLE);
		//設置失敗事件監聽
		sys_loading_dialog_fail.setOnClickListener(listener);
		//設置失敗文本
		sys_loading_dialog_fail_tv.setText(failStr);
		//設置加載時圖片隱藏
		sys_loading_dialog_img.setVisibility(View.GONE);
		//設置加載時文本隱藏
		sys_loading_dialog_tv.setVisibility(View.GONE);
	}
}

然後是sys_loading.xml佈局文件

< ?xml version="1.0" encoding="utf-8"?>
< RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="30dp"
    android:gravity="center" >
    < !--加載中視圖圖片 -->
    < ImageView
        android:id="@+id/sys_loading_dialog_img"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@null"/>
    < !--加載中視圖文本 -->
    < TextView 
        android:id="@+id/sys_loading_dialog_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textStyle="normal"
        android:layout_marginTop="15dp"
        android:textSize="14sp"
        android:textColor="@color/black2"
        android:layout_below="@id/sys_loading_dialog_img"
        android:gravity="center"/>
    < !--加載失敗佈局視圖-->
    < RelativeLayout 
        android:id="@+id/sys_loading_dialog_fail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:visibility="gone">
        < !--加載失敗圖片 -->
    	< ImageView
       	 	android:id="@+id/sys_loading_dialog_fail_img"
       	 	android:layout_centerHorizontal="true"
        	android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:src="@drawable/sys_loading_dialog_fail"
        	android:contentDescription="@null"/>
    	< !--加載失敗文本 -->
    	< TextView 
        	android:id="@+id/sys_loading_dialog_fail_tv"
        	android:layout_width="match_parent"
        	android:layout_height="wrap_content"
        	android:layout_below="@id/sys_loading_dialog_fail_img"
        	android:layout_marginTop="15dp"
        	android:textSize="14sp"
        	android:textColor="@color/black2"
        	android:gravity="center"/>
    < /RelativeLayout>
< /RelativeLayout>

  最後drawable文件就不貼出來了,這裏直接給出主要的使用代碼:

public class MainActivity extends Activity {
    private Button btnLoading;
    //自定義加載框
    private SysLoading sysLoading;
    private boolean flag = true;
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 100:
                Toast.makeText(MainActivity.this, "加載成功", Toast.LENGTH_SHORT).show();
                //隱藏加載框
                sysLoading.setVisibility(View.GONE);
                break;

            default:
                break;
            }
        };
    };
    
       
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnLoading = (Button) findViewById(R.id.btn_loading);
        
        //獲取加載視圖
        sysLoading = (SysLoading) findViewById(R.id.sysLoading);
        Message msg = handler.obtainMessage();
        msg.what = 100;
        sysLoading.showAnim("正在加載...");
        handler.sendMessageDelayed(msg, 2000);
    }
    public void Loading(View view) {
        sysLoading.initData();
        //加載失敗
        sysLoading.fialLoad("加載失敗...", new OnClickListener() {
            @Override
            public void onClick(View v) {
                Message msg = handler.obtainMessage();
                msg.what = 100;
                sysLoading.showAnim("正在加載...");
                handler.sendMessageDelayed(msg, 2000);
                }
        });
    }
}

這裏給出demo的下載地址:http://download.csdn.net/detail/u014727709/9739898
轉載自 :http://blog.csdn.net/u014727709/article/details/54584894
歡迎start,歡迎評論,歡迎指正

發佈了61 篇原創文章 · 獲贊 102 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章