自定义 非常好用水平进度条工具类

public class DialogUtils {

    private static final Logger logger = LoggerFactory.getLogger(DialogUtils.class);

    public static void indeterminate(Context context, Handler handler, String message,
                                     final Runnable runnable, OnDismissListener dismissListener) {
        try {
            indeterminateInternal(context, handler, message, runnable, dismissListener, true);
        } catch (Exception e) {
        }
    }

    public static void indeterminate(Context context, Handler handler, String message,
                                     final Runnable runnable, OnDismissListener dismissListener, boolean cancelable) {
        try {
            indeterminateInternal(context, handler, message, runnable, dismissListener, cancelable);
        } catch (Exception e) {
        }
    }

    private static ProgressDialog createProgressDialog(Context context, String message) {
        ProgressDialog dialog = new ProgressDialog(context);
        dialog.setIndeterminate(false);
        dialog.setMessage(message);
        return dialog;
    }

    private static void indeterminateInternal(Context context, final Handler handler, String message,
                                              final Runnable runnable, OnDismissListener dismissListener, boolean cancelable) {
        final ProgressDialog dialog = createProgressDialog(context, message);
        dialog.setCancelable(cancelable);
        if (dismissListener != null) {
            dialog.setOnDismissListener(dismissListener);
        }

        dialog.show();
        new Thread() {

            @Override
            public void run() {
                runnable.run();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            dialog.dismiss();
                        } catch (Exception e) {
                        }
                    }
                });
            }
        }.start();
    }



    /**
     * 创建加载对话框
     * @param context
     * @param msg
     * @return
     */
    public static LoadingDialog createLoadingDialog(Context context, String msg) {
        LoadingDialog loadingDialog = new LoadingDialog(context);
        loadingDialog.setMsg(msg);
        return loadingDialog;

    }



    public static String getProcessName(Context context) {
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

        for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
            if (processInfo.pid == android.os.Process.myPid()) {
                return processInfo.processName;
            }
        }
        return "";
    }


    public static class LoadingDialog extends Dialog {
        final ClipDrawable drawable;
        Handler handler;
        //有进度
        ImageView postionImage;
        //背景
        ImageView bgImage;
        //无进度
        ImageView moveImage;
        //进度提示
        TextView tvPostion;
        private TextView tipTextView;
        //进度条类型 True 有进度  False 无进度
        private boolean isPostion = false;
        //进度条最大值
        private int maxPostion = 100;
        //当前进度
        private int curPostion;


        public LoadingDialog(Context context) {
            super(context, com.pemt.android.R.style.loading_dialog);

            LayoutInflater inflater = LayoutInflater.from(context);
            View v = inflater.inflate(com.pemt.android.R.layout.loading_dialog, null);
            LinearLayout layout = (LinearLayout) v.findViewById(com.pemt.android.R.id.ll_main);
            bgImage = (ImageView) v.findViewById(com.pemt.android.R.id.iv_progressbar_bg);
            postionImage = (ImageView) v.findViewById(com.pemt.android.R.id.iv_progressbar_site);
            moveImage = (ImageView) v.findViewById(com.pemt.android.R.id.iv_progressbar_move);
            tvPostion = (TextView) v.findViewById(com.pemt.android.R.id.tv_postion);


            //获取图片所显示的ClipDrawble对象
            drawable = (ClipDrawable) postionImage.getBackground();
            handler = new Handler() {
                public void handleMessage(Message msg) {

                    if (msg.what == 0x1233) {
                        //修改ClipDrawable的level值
                        drawable.setLevel(msg.arg1);
                    }
                }
            };

            tipTextView = (TextView) v.findViewById(com.pemt.android.R.id.tv_msg);
            tipTextView.setText("");// 设置加载信息

            setCancelable(false);// 不可以用“返回键”取消
            setContentView(layout, new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT));// 设置布局
        }

        private void showPostion(int level) {
            if (level > 1000)
                level = 1000;
            if (level < 0)
                level = 0;
            drawable.setLevel(level);
        }

        @Override
        public void dismiss() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    //关闭动画
                    moveImage.clearAnimation();

                }
            });
            super.dismiss();
        }

        @Override
        public void show() {
            if (isShowing()) {
                return;
            }
            super.show();
            if (isPostion) {
                drawable.setLevel(0);
                moveImage.setVisibility(View.GONE);
                postionImage.setVisibility(View.VISIBLE);
                tvPostion.setVisibility(View.VISIBLE);
            } else {
                moveImage.setVisibility(View.VISIBLE);
                postionImage.setVisibility(View.GONE);
                tvPostion.setVisibility(View.GONE);
                assert bgImage.getViewTreeObserver() != null;
                bgImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        slideview(moveImage, 3, bgImage.getWidth() - moveImage.getWidth() - 4);
                        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                            bgImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        } else {
                            bgImage.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                        }

                    }
                });
            }
        }

        //设置进度条类型
        public void setProgressType(Boolean isPostion) {
            this.isPostion = isPostion;
        }

        //设置进度条的最大值
        public Boolean setMaxPostion(int postion) {
            if (postion < 1) {
                postion = 100;
                this.maxPostion = postion;
                return false;
            }
            this.maxPostion = postion;
            setPostion(curPostion);
            return true;
        }

        //设置进度条的当前位置
        public void setPostion(int postion) {
            this.curPostion = postion;
            int num = postion * 10000 / maxPostion;
            if (num > 10000)
                num = 10000;
            if (num < 0)
                num = 0;

            Message msg = new Message();
            msg.what = 0x1233;
            msg.arg1 = num;
            //发送消息,通知应用修改ClipDrawable对象的level值
            handler.sendMessage(msg);
            num = num / 100;
            tvPostion.setText(num + "%");
        }

        //动画设置
        public void slideview(final ImageView imageView, final float p1, final float p2) {
            TranslateAnimation animation = new TranslateAnimation(p1, p2, 0, 0);
            //添加了这行代码的作用时,view移动的时候 会有弹性效果
            //animation.setInterpolator(new OvershootInterpolator());

            //设置动画持续
            animation.setDuration(4500);
            animation.setStartOffset(0);

            animation.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    slideview(moveImage, 3, bgImage.getWidth() - moveImage.getWidth() - 4);
                }
            });
            imageView.startAnimation(animation);
        }

        public void setMsg(String msg) {
            tipTextView.setText(msg);
        }
    }
}
用法:
例:
public class LoginActivity extends Activity {
    private static final Logger logger = LoggerFactory.getLogger(LoginActivity.class);
    private DialogUtils.LoadingDialog loadingDialog;
    private volatile Future future = null;
    private SharedPreferences pref;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        pref = PreferenceManager.getDefaultSharedPreferences(this);
        loadingDialog = DialogUtils.createLoadingDialog(this, "获取用户名...");//自定义进度条
        loadingDialog.setCancelable(true);
        loadingDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                if (future != null && !future.isDone() && !future.isCancelled()) {
                    future.cancel(true);
                }
            }
        });
        loadingDialog.show();
    }
//    @UiThread
    void showDialogMsg(String msg) {
        loadingDialog.setMsg(msg);
        if (!isFinishing() && !loadingDialog.isShowing()) {
            loadingDialog.show();
        }
    }
    void dismissDialog() {
        if (!isFinishing() && loadingDialog != null && loadingDialog.isShowing()) {
            loadingDialog.dismiss();
        }
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值