做開發的時候,爲了讓用戶體驗比較好一點,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,歡迎評論,歡迎指正