自定义progressDialog(数据加载框)的实现

大家在开发客户端时基本上都需要获取数据,在获取数据时会有一个等待状态,这时我们可以利用系统自带的progressDialog来向用户展示"数据正在加载中..."等等,但有时我们会觉得系统自带的progressDialog太难看,那么我们就可以用自定义的progressDialog了,在网上搜了许多,都是很麻烦,于是自己结合网上资源,总结整理了一下,先看效果:

下面看代码

主代码MyDialog.java

package cn.xxs.test.myfragmentprojecttest.customwidget;

import cn.xxs.test.myfragmentprojecttest.R;
import android.app.Dialog;
import android.content.Context;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.graphics.Canvas;  
import android.graphics.Paint;  
import android.util.AttributeSet;  
import android.view.LayoutInflater;
import android.view.View;  
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

  
public class MyDialog  {  
       
	/**
	 * 自定义的progressDialog
	 * @param context 上下文
	 * @param msg 加载数据时显示的信息
	 * @return Dialog
	 */
	@SuppressWarnings("deprecation")
	public static Dialog createLoadingDialog(Context context, String msg) {

		LayoutInflater inflater = LayoutInflater.from(context);
		//加载loading_dialog.xml
		View v = inflater.inflate(R.layout.loading_dialog, null);// 得到加载view
		
		// loading_dialog.xml中的LinearLayout
		LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加载布局
		
		// loading_dialog.xml中的TextView
		TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);// 提示文字
		tipTextView.setText(msg);// 设置加载信息(如:登录中,请稍候...)
		
		// loading_dialog.xml中的ImageView
		ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
		// 加载动画load_animation.xml
		Animation anim = AnimationUtils.loadAnimation(context, R.anim.load_animation);
		// 使用ImageView显示动画
		spaceshipImage.startAnimation(anim);
		
		// 创建自定义样式loading_dialog
		Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);
		loadingDialog.setCancelable(false);// 不可以用“返回键”取消
		// 设置布局
		loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT));
		return loadingDialog;

	}
}  


其中dialog的layout:loading_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/dialog_view" 
	android:orientation="vertical"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent"
	android:minHeight="60dp"
	android:minWidth="180dp"
	android:gravity="center"
	android:padding="10dp"
	android:background="@drawable/loading_bg">
	<ImageView 
		android:id="@+id/img"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content" 
		android:src="@drawable/loading2"
		/>
	<TextView 
	    android:id="@+id/tipTextView"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		android:layout_marginLeft="10dp"
		android:textColor="#000000"
		android:text="数据加载中……" />
</LinearLayout>

这个大家也可以自己设计,达到自己想要的效果;

dialog的stytle:注意:这个需要写在stytle.xml中

<style name="loading_dialog" parent="android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/loading_bg</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>


最后是load_animation.xml

这个主要是实现加载数据时那个小圈圈360度转动的效果

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <rotate
        android:duration="1500"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="-1"
        android:repeatMode="restart"
        android:startOffset="-1"
        android:toDegrees="+360" />

</set>

使用时:只需在Activity中new一下:

MyDialog  dialog=new MyDialog().createLoadingDialog(此处为当前activity,"登录中......");

dialog.show();

中间部分即我们加载数据的代码,需单开线程,不是文章重点,不再熬述,

最后:关闭即可

dialog.dismiss();




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白玉梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值