设计自己的ProgressDialog

如果遇到了很慢的处理过程,例如从网络下载文件等操作,我们通常会使用AsyncTask类来辅助完成,而同时为了给用户合理的等待操作,通常会在AsyncTask的onPreExecute方法中,添加一个ProgressDialog,告知用户等待,

系统自带的ProgressDialog有时不能满足我们的UI需要,这时需要我们自己来写,下面的内容就是实现了一个简单的带有旋转的ProgressDialog。

效果图如下:



打开后会一直在旋转(由于只是简单截图,所以四边有边角)


实现方法:

步骤一:定义一个布局文件,例如myalert.xml,定义要设计成的样式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:background="@drawable/background"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/loading_img"
        android:src="@drawable/loadding_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

里面的background和loadding_image分别为:

                            



步骤二:定义一个ProgressDialog的子类,例如MyDialog,Override里面的onCreate方法

package xxxxxx.xxxxxxx;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnShowListener;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class MyDialog extends ProgressDialog {

    public MyDialog(Context context, int theme) {
        super(context, theme);
    }

    public MyDialog(Context context) {
        super(context);
    }

    @Override
	protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.myalert);
	    setScreenBrightness();
	    this.setOnShowListener(new OnShowListener(){

                @Override
                public void onShow(DialogInterface dialog) {
                    ImageView image = (ImageView) MyDialog.this.findViewById(R.id.loading_img);
                    Animation anim = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
                    anim.setRepeatCount(Animation.INFINITE); // 设置INFINITE,对应值-1,代表重复次数为无穷次
                    anim.setDuration(1000);                  // 设置该动画的持续时间,毫秒单位
                    anim.setInterpolator(new LinearInterpolator());	// 设置一个插入器,或叫补间器,用于完成从动画的一个起始到结束中间的补间部分
                    image.startAnimation(anim);
                }
            });
	}

    private void setScreenBrightness() {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        /**
        *  此处设置亮度值。dimAmount代表黑暗数量,也就是昏暗的多少,设置为0则代表完全明亮。
        *  范围是0.0到1.0
        */
        lp.dimAmount = 0;
    }
    
}

更新一下上面代码的错误:

重写setScreenBrightness方法,忘记重新设置回去了

    private void setScreenBrightness() {
        Window window = getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        /**
        *  此处设置亮度值。dimAmount代表黑暗数量,也就是昏暗的多少,设置为0则代表完全明亮。
        *  范围是0.0到1.0
        */
        lp.dimAmount = 0;
        window.setAttributes(lp);
    }



步骤三:调用

ProgressDialog pd = new MyDialog(Context);
pd.show();
// 或者
// pd.dismiss();


至此,就完成了自定义ProgressDialog的工作。


欢迎大家拍砖指正!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值