自定义网络加载中对话框

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();

时间: 2024-11-05 21:50:28

自定义网络加载中对话框的相关文章

【安卓基础】简单快捷的加载中对话框

遇到的需求 项目中有些界面需要显示加载中,例如登陆界面.注册界面等等.一开始考虑找个第三方库,但是第三方库往往为了达到普遍的适用性,封装得非常复杂.有时候一个库就差不多1mb大小,这样接入成本太大了,况且一个项目还需要其他第三方库接入,如果每一个功能都用第三方库解决,势必导致开发出来的应用体积臃肿,而且难以管理结构. 而我只是需要简单展示一个加载中提示,所以自己实现一个会更加合理,而且更加小巧灵活. 方案的选择 在安卓开发中,系统提供了对话框类用于开发.所以我直接选择使用Support V7的A

简单的“加载中”动画效果

在日常开发过程中,处理一些延迟操作的时候,经常需要显示一个"加载中"对话框来来表示程序正在请求或正在处理.那么如何写一个最简单的动画效果呢? 这里我写了个demo: MainActivity: public class MainActivity extends Activity {     //ProgressDialog用于显示加载对话框用     private ProgressDialog progressDialog = null;     //显示结果用     privat

android快捷开发之Retrofit网络加载框架的简单使用

大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据进行解析解决,而我们自己学的东西大多数情况下都没有针对网络很糟糕的情况进行优化.下面就给大家带来Square Inc这家有创新精神的公司留下的Retrofit网络加载库的使用! Retrofit封装了从Web API下载数据,解析成一个普通的java对象(POJO),这里我们就去天狗网使用他们的一个

iOS多线程自定义operation加载图片 不重复下载图片

摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用:   2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验   2:自定义operation继承自NSOperation,在子线程中下载图片: 3:保证图片只下载一次,还有保证下载任务不重复 ------------------------------------------------------------------------------------ 实现原理:1:图片缓存:用

登录圆形头像之网络加载与缓存到本地

Android开发中常常有用户头像显示,似乎大多数都是圆形显示,如果每次加载网络头像,会频繁的请求网络,所以本文主要说的是登录时的头像网络加载和缓存到本地,以便于下次加载时直接从本地获取即可. 效果图 自定义控件实现圆形头像显示请看, Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示 这篇博客即可. 代码: public class MainActivity extends Activity implements OnClickListener { private Ima

android 实现加载动画对话框

先来两张效果图        自定义对话框: public class LoadingProgressDialog extends ProgressDialog { private AnimationDrawable mAnimation; private Context mContext; private ImageView mImageView; private String mLoadingTitle; private TextView mLoadingTv; private int mR

JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)

在很多项目中都会涉及到数据加载.数据加载有时可能会是2-3秒,为了给一个友好的提示,一般都会给一个[数据加载中...]的提示.今天就做了一个这样的提示框. 先去jQuery官网看看怎么写jQuery插件,然后就开始写了.写下来这么一个插件,稍作优化,就在项目中使用了.下面贴的是我写这个插件时的测试图: 这张图模拟数据加载前提示框的展示,这个表格是一个写在页面上的.蓝色的底纹就是遮罩层. (function($){ $.fn.extend({ /** * 打开遮罩,并显示一段文字. * @para

网络加载数据及单例工具类的代码抽取

今天给大家分享一一下网络加载数据:先看代码吧-------------------------- - (void)diseaseNumWithFinishedBlock:(FinishedBlocks)finishedBlock{ NSString *urlStr = @"http://数据接口"; NSDictionary *prama = @{响应参数}; [[NetWorkTool sharedNetWorkTool] POST:urlStr parameters:prama p

【iOS】网络加载图片缓存与SDWebImage

加载网络图片可以说是网络应用中必备的.如果单纯的去下载图片,而不去做多线程.缓存等技术去优化,加载图片时的效果与用户体验就会很差. 一.自己实现加载图片的方法 tips: *iOS中所有网络访问都是异步的.(自己开线程去下载) *普通为模型增加UIImage属性的方法做的是内存缓存(下次启动还需要从网络重新加载), 而要做本地缓存的话,还要自己手动存储网络上下载的图片. *为了加快访问, 还需要自己去弄缓存.(内存缓存或者本地缓存) *当图片没有下载完成时,还要设置占位图片. 以下代码用NSOp