Android自定义网络加载中对话框

fydxdk 10年前

    App在与服务器进行网络交互的时候,需要有一个提示的加载框,如图:

,此时我们可以自定义一个加载中的对话框,代码如下:

public class LoadingDialog extends Dialog {  private static final int CHANGE_TITLE_WHAT = 1;  private static final int CHNAGE_TITLE_DELAYMILLIS = 300;  private static final int MAX_SUFFIX_NUMBER = 3;  private static final char SUFFIX = '.';      private ImageView iv_route;  private TextView detail_tv;  private TextView tv_point;  private RotateAnimation mAnim;      private Handler handler = new Handler() {  private int num = 0;      public void handleMessage(android.os.Message msg) {  if (msg.what == CHANGE_TITLE_WHAT) {  StringBuilder builder = new StringBuilder();  if (num >= MAX_SUFFIX_NUMBER) {  num = 0;  }  num++;  for (int i = 0; i < num; i++) {  builder.append(SUFFIX);  }  tv_point.setText(builder.toString());  if (isShowing()) {  handler.sendEmptyMessageDelayed(CHANGE_TITLE_WHAT, CHNAGE_TITLE_DELAYMILLIS);  }  else {  num = 0;  }  }  };  };      public LoadingDialog(Context context) {  super(context, R.style.Dialog_bocop);  init();  }      public LoadingDialog(Context context, boolean isTrans) {  super(context, isTrans ? R.style.Loading_Dialog_trans : R.style.Dialog_bocop);  init();  }      private void init() {  setContentView(R.layout.common_dialog_loading_layout);  iv_route = (ImageView) findViewById(R.id.iv_route);  detail_tv = (TextView) findViewById(R.id.detail_tv);  tv_point = (TextView) findViewById(R.id.tv_point);  initAnim();  getWindow().setWindowAnimations(R.anim.alpha_in);  }      private void initAnim() {  // mAnim = new RotateAnimation(360, 0, Animation.RESTART, 0.5f, Animation.RESTART, 0.5f);  mAnim = new RotateAnimation(0, 360, Animation.RESTART, 0.5f, Animation.RESTART, 0.5f);  mAnim.setDuration(2000);  mAnim.setRepeatCount(Animation.INFINITE);  mAnim.setRepeatMode(Animation.RESTART);  mAnim.setStartTime(Animation.START_ON_FIRST_FRAME);  }      @Override  public void show() {//在要用到的地方调用这个方法  iv_route.startAnimation(mAnim);  handler.sendEmptyMessage(CHANGE_TITLE_WHAT);  super.show();  }      @Override  public void dismiss() {  mAnim.cancel();  super.dismiss();  }      @Override  public void setTitle(CharSequence title) {  if (TextUtils.isEmpty(title)) {  detail_tv.setText("正在加载");  }  else {  detail_tv.setText(title);  }  }      @Override  public void setTitle(int titleId) {  setTitle(getContext().getString(titleId));  }      public static void dismissDialog(LoadingDialog loadingDialog) {  if (null == loadingDialog) { return; }  loadingDialog.dismiss();  }  }    -------------对应的布局如下------------------    <?xml version="1.0" encoding="utf-8"?>      <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"          android:layout_width="160dp"          android:layout_height="160dp"          android:layout_gravity="center"          android:background="@drawable/common_show_dialog"          android:orientation="vertical" >              <RelativeLayout              android:layout_width="fill_parent"              android:layout_height="0dp"              android:layout_weight="3"              android:paddingTop="22dp"              android:gravity="center" >                  <ImageView                  android:id="@+id/iv_route"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_centerHorizontal="true"                  android:layout_centerVertical="true"                  android:background="@drawable/dialog_bocop_loading_rotate_anim_img" />          </RelativeLayout>              <RelativeLayout              android:layout_width="fill_parent"              android:layout_height="0dp"              android:layout_marginBottom="15dp"              android:layout_marginLeft="10dp"              android:layout_marginRight="10dp"              android:layout_weight="1"              android:gravity="center_horizontal" >                  <TextView                  android:id="@+id/detail_tv"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_toLeftOf="@+id/tv_point"                  android:ellipsize="marquee"                  android:gravity="center"                  android:singleLine="true"                  android:text="正在加载"                  android:textColor="#ffffff"                  android:textSize="20sp" />                  <TextView                  android:id="@+id/tv_point"                  android:layout_width="20dp"                  android:layout_height="wrap_content"                  android:layout_alignParentRight="true"                  android:text="..."                  android:textColor="#ffffff"                  android:textSize="20sp" />          </RelativeLayout>      </LinearLayout>    比如在Activity中要实现加载对话框调用 :    LoadingDialog loadingDialog ;    if (null == loadingDialog) {  loadingDialog = new LoadingDialog(aty);  loadingDialog.setOnCancelListener(this);  }  loadingDialog.setTitle(“数据加载中”);  if (!loadingDialog.isShowing()) loadingDialog.show();