• CustomDialog


    package com.k1.doctor.widget;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.R.color;
    import android.app.Dialog;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorFilter;
    import android.graphics.Paint;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import android.graphics.Typeface;
    import android.graphics.drawable.ColorDrawable;
    import android.graphics.drawable.Drawable;
    import android.graphics.drawable.ShapeDrawable;
    import android.graphics.drawable.StateListDrawable;
    import android.graphics.drawable.shapes.RoundRectShape;
    import android.text.TextPaint;
    import android.text.TextUtils;
    import android.util.DisplayMetrics;
    import android.util.TypedValue;
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.Window;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.view.animation.TranslateAnimation;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.ImageView.ScaleType;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.ProgressBar;
    import android.widget.RadioButton;
    import android.widget.TextView;
    
    import com.k1.doctor.R;
    
    /**
     * 
     * @author Administrator
     * 
     *         <style name="dialog" parent="@android:style/Theme.Dialog"> <item name
     *         ="android:windowFrame">@null</item>
     *         <item name="android:windowIsFloating">true</item>
     *         <item name="android:windowIsTranslucent">true</item>
     *         <item name="android:windowNoTitle">true</item>
     *         <item name="android:windowBackground">@android:color/transparent
     *         </item>
     *         <item name="android:backgroundDimEnabled">true</item> </style>
     * 
     */
    @SuppressWarnings("unused")
    public class CustomDialog extends Dialog {
    
        public final static int TYPE_MESSAGE = 0;
        public final static int TYPE_EDIT = 1;
        public final static int TYPE_PROGRESS = 2;
        public final static int TYPE_RADIO = 3;
        public final static int TYPE_LOADING = 4;
        public final static int TYPE_ALERT = 5;
        public final static int TYPE_CHOOSE = 6;
        public final static int TYPE_CANCEL = 7;
        public final static int TYPE_POPUP_MESSAGE = 8;
    
        private int mTypeFlag = TYPE_MESSAGE;
        private View mRoot;
        private ReturnResults mReturnResult; // 返回结果
        int mWidth, mHeitht;
    
        private String mNotitleMessage; // 无标题对话框 信息
    
        private static Typeface sTypeface;
    
        public static void initTypeface(Typeface tf) {
            sTypeface = tf;
        }
    
        // 无标题对话框 构造方法
    
        // 有标题框(有返回)
        public static CustomDialog createMessageDialog(Context context, int message, ReturnResults result) {
            mCustomDialog = new CustomDialog(context, TYPE_CHOOSE, context.getResources().getString(message), result);
            return mCustomDialog;
        }
    
        public static CustomDialog createAlertDialog(Context context, int message, ReturnResults result) {
            mCustomDialog = new CustomDialog(context, TYPE_MESSAGE, context.getResources().getString(message), result);
            return mCustomDialog;
        }
    
        public static CustomDialog createMessageDialog(Context context, String message, ReturnResults result) {
            mCustomDialog = new CustomDialog(context, TYPE_MESSAGE, message, result);
            return mCustomDialog;
        }
    
        public static CustomDialog createLoadingDialog(Context context) {
            mCustomDialog = new CustomDialog(context, TYPE_LOADING);
            return mCustomDialog;
        }
    
        // 编辑框
        private CustomDialog(Context context, int type, String title, ReturnResults returnResult) {
            super(context, R.style.dialog);
            mTitle = title;
            mTypeFlag = type;
            mReturnResult = returnResult;
            init();
        }
    
        // 无标题框
        private CustomDialog(Context context, int type, String message) {
            super(context, R.style.dialog);
            mNotitleMessage = message;
            mTypeFlag = type;
            init();
        }
    
        // /////
        public CustomDialog(Context context, int type, String title, String message, String[] string,
                ReturnResults returnResult) {
            super(context, R.style.dialog);
            mTitle = message;
            mTypeFlag = type;
            mReturnResult = returnResult;
            init();
        }
    
        private String mText;
        static CustomDialog mCustomDialog;
    
        public static void dismissDialog() {
            if (mCustomDialog != null) {
                mCustomDialog.dismiss();
                mCustomDialog = null;
            }
        }
    
        // 编辑对话框 构造方法
        public static CustomDialog createEditDialog(Context context, String title, String edit, ReturnResults result) {
            mCustomDialog = new CustomDialog(context, TYPE_EDIT, title, edit, result);
            return mCustomDialog;
        }
    
        public CustomDialog(Context context, int type, String title, String text, ReturnResults returnResult) {
            super(context, R.style.dialog);
            mTitle = title.toString();
            mTypeFlag = type;
            mReturnResult = returnResult;
            mText = text;
            init();
        }
    
        public static CustomDialog createChooseDialog(Context context, String title, String text,
                ReturnResults returnResult) {
            mCustomDialog = new CustomDialog(context, TYPE_CHOOSE, title, text, returnResult);
            return mCustomDialog;
    
        }
    
        // 编辑对话框 构造方法
        public static CustomDialog createEditDialog(Context context, String title, ReturnResults result) {
            mCustomDialog = new CustomDialog(context, TYPE_EDIT, new StringBuffer(title), result);
            return mCustomDialog;
        }
    
        public CustomDialog(Context context, int type, StringBuffer title, ReturnResults returnResult) {
            super(context, R.style.dialog);
            mTitle = title.toString();
            mTypeFlag = type;
            mReturnResult = returnResult;
            init();
        }
    
        private int mPrpgressCounts;// 进度条对话框 时间
    
        // 进度条对话框 构造方法
    
        public CustomDialog(Context context, int type, int counts) {
            super(context, R.style.dialog);
            mPrpgressCounts = counts;
            mTypeFlag = type;
            init();
        }
    
        private String mRadioTitle; // 单选对话框 标题
        private List<String> mRadioItems; // 单选对话框 选项
    
        // 单选对话框 构造方法
    
        // public st
    
        public static CustomDialog createSelecterDialog(Context context, String title, List<String> radioItems,
                ReturnResults returnResult) {
            mCustomDialog = new CustomDialog(context, TYPE_RADIO, title, radioItems, returnResult);
            return mCustomDialog;
        }
    
        public static CustomDialog createSelecterDialog(Context context, String title, String[] radioItems,
                ReturnResults returnResult) {
            List<String> list = new ArrayList<String>();
            for (int i = 0; i < radioItems.length; i++) {
                list.add(radioItems[i]);
            }
            return createSelecterDialog(context, title, list, returnResult);
        }
    
        //
        public CustomDialog(Context context, int type, String title, List<String> radioItems, ReturnResults returnResult) {
            super(context, R.style.dialog);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            mTitle = title;
            mTypeFlag = type;
            mRadioItems = radioItems;
            mReturnResult = returnResult;
    
            init();
        }
    
        @Override
        public void dismiss() {
            super.dismiss();
            mCustomDialog = null;
        }
    
        public CustomDialog(Context context, int type) {
            super(context, R.style.dialog);
            mTypeFlag = type;
            init();
        }
    
        @Override
        public void show() {
            if (mCustomDialog != null) {
                super.show();
            }
        }
    
        String mAlertTitle;
        String mAlertMessage;
    
        public static CustomDialog createAlertDialog(Context context, String title, String message) {
            mCustomDialog = new CustomDialog(context, TYPE_ALERT, title, message);
            return mCustomDialog;
    
        }
    
        public static CustomDialog createCancelDialog(Context context) {
            mCustomDialog = new CustomDialog(context, TYPE_ALERT);
            return mCustomDialog;
    
        }
    
        public CustomDialog(Context context, int type, String title, String message) {
            super(context, R.style.dialog);
            mTitle = title;
            mAlertMessage = message;
            mTypeFlag = type;
    
            init();
        }
    
        public static CustomDialog createPopupMessageDialog(Context context, String title, String message) {
            mCustomDialog = new CustomDialog(context, TYPE_POPUP_MESSAGE, title, message);
            return mCustomDialog;
        }
    
        String mTitle;
    
        public void init() {
            mWidth = Density.getInstence(getContext()).getScreenWidth();
            mHeitht = Density.getInstence(getContext()).getScreenHeight();
            switch (mTypeFlag) {
            case TYPE_EDIT:
                String[] s = { "NO", "YES" };
                mRoot = new StypeEdit(getContext(), mTitle, mText, s, mReturnResult);
                break;
            case TYPE_MESSAGE:
                mRoot = new DialogComfirm(getContext(), mTitle, mReturnResult);
                break;
            case TYPE_PROGRESS:
                String titleText = "下载信息";
                mRoot = new StypeProgress(getContext(), mPrpgressCounts, titleText);
                break;
            case TYPE_RADIO:
                List<String> listItems = new ArrayList<String>();
                for (int i = 0; i < 15; i++) {
                    listItems.add("Item" + i);
                }
                String radiobutton = "确定";
                mRoot = new StypeRadio(getContext(), mTitle, mRadioItems, radiobutton, mReturnResult);
                break;
            case TYPE_LOADING:
                String text = "正在加载中...";
                mRoot = new StypeLoading(getContext(), text);
                break;
            case TYPE_CHOOSE:
                // String text = "正在加载中...";
                mRoot = new DialogChoose(getContext(), mTitle, mText, mReturnResult);
                break;
            case TYPE_ALERT:
                // String text = "正在加载中...";
    
                mRoot = new DialogAlert(getContext(), mTitle, mAlertMessage);
                break;
            case TYPE_CANCEL:
                // String text = "正在加载中...";
    
                mRoot = new StyCancel(getContext());
                break;
            case TYPE_POPUP_MESSAGE:
                // String text = "正在加载中...";
    
                mRoot = new DialogPopupMessage(getContext(), mTitle, mAlertMessage);
                break;
    
            default:
                break;
            }
            setContentView(mRoot);
        }
    
        class DialogPopupMessage extends FrameLayout {
            String title = "title";
            String message = "message";
            Context context;
    
            public DialogPopupMessage(Context context, String title, String message) {
                super(context);
                this.context = context;
                this.title = title;
                this.message = message;
                initView();
            }
    
            @SuppressWarnings("deprecation")
            public void initView() {
                LinearLayout.LayoutParams contextParams = new LinearLayout.LayoutParams((int) (mWidth * 0.9),
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                LinearLayout linearlayout = new LinearLayout(context);
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                linearlayout.setGravity(Gravity.CENTER);
                linearlayout.setOrientation(LinearLayout.VERTICAL);
    
                LinearLayout.LayoutParams ButtonParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(context).dip2px(60));
                // ButtonParams.bottomMargin =
                // Density.getInstence(context).dip2px(10);
                // linearlayout.setBackgroundDrawable(new BackDrawable("linear"));
    
                TextView titleView = new TextView(context);
                titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18F);
                CustomDrawables customs = new CustomDrawables(context, (int) (mWidth * 0.9),
                        Density.getInstence(context).dip2px(80), 0);
                titleView.setBackgroundDrawable(customs.paintDrawable());
    
                titleView.setText(title);
                titleView.setTextColor(Color.BLACK);
    
                int pading = Density.getInstence(context).dip2px(10);
                titleView.setPadding(pading, pading, pading, pading);
                View view = new View(context);
    
                TextView messageView = new TextView(context);
                messageView.setText(message);
                messageView.setBackgroundColor(Color.WHITE);
                messageView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
                messageView.setTextColor(Color.BLACK);
                messageView.setPadding(pading, pading, pading, pading);
                messageView.setMinHeight((int) (mWidth * 0.6));
    
                Button okButton = new Button(context);
                okButton.setGravity(Gravity.CENTER);
                okButton.setText("OK");
                okButton.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        dismiss();
                    }
                });
                okButton.setTextColor(0xff241e5a);
                StateListDrawable state = new StateListDrawable();
                state.addState(new int[] { android.R.attr.state_pressed }, new BackDrawable("button_1"));
                state.addState(new int[] { -android.R.attr.state_pressed }, new BackDrawable("button_0"));
    
                okButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
                linearlayout.addView(titleView, linearParams);
                view.setBackgroundColor(0xffcccccc);
    
                LinearLayout buttonlinear = new LinearLayout(context);
                buttonlinear.setGravity(Gravity.CENTER);
                CustomDrawables custom = new CustomDrawables(context, (int) (mWidth * 0.9),
                        Density.getInstence(context).dip2px(60), CustomDrawables.TYPE_BUTTON);
                okButton.setBackgroundDrawable(custom.paintDrawable());
                buttonlinear.addView(okButton, ButtonParams);
                linearlayout.addView(messageView, linearParams);
                linearlayout.addView(view, LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(context).dip2px(1));
                linearlayout.addView(buttonlinear, linearParams);
                addView(linearlayout, contextParams);
                if (sTypeface != null) {
                    titleView.setTypeface(sTypeface);
                    messageView.setTypeface(sTypeface);
                    okButton.setTypeface(sTypeface);
                }
            }
    
            class BackDrawable extends Drawable {
                int corners = Density.getInstence(context).dip2px(5);
                float[] cornersRect = { corners, corners, corners, corners, corners, corners, corners, corners };
                String s;
    
                public BackDrawable(String s) {
                    this.s = s;
                }
    
                @Override
                public void setColorFilter(ColorFilter colorFilter) {
                    // TODO Auto-generated method stub
    
                }
    
                @Override
                public void setAlpha(int alpha) {
                    // TODO Auto-generated method stub
    
                }
    
                @Override
                public int getOpacity() {
                    // TODO Auto-generated method stub
                    return 0;
                }
    
                @Override
                public void draw(Canvas canvas) {
                    ShapeDrawable myShapeDrawable = new ShapeDrawable(new RoundRectShape(cornersRect, null, null));
                    myShapeDrawable.getPaint().setAntiAlias(true);
                    if (s.equals("linear")) {
    
                        myShapeDrawable.getPaint().setColor(Color.WHITE);
                        myShapeDrawable.setBounds(0, 0, (int) (mWidth * 0.9), getHeight());
                    } else if (s.endsWith("button_0")) {//
    
                        // myShapeDrawable.getPaint().setColor(Color.WHITE);
                        // myShapeDrawable.setBounds(0, 0, (int) (mWidth * 0.5),
                        // Density.getInstence(context).dip2px(35));
                        myShapeDrawable.getPaint().setStyle(Paint.Style.STROKE);
                        myShapeDrawable.getPaint().setStrokeWidth(Density.getInstence(context).dip2px(1));
                        myShapeDrawable.getPaint().setColor(0xff241e5a);
                        myShapeDrawable.setBounds(0, 0, (int) (mWidth * 0.7 / 2), Density.getInstence(context).dip2px(35));
                    } else if (s.endsWith("button_1")) {
    
                        // myShapeDrawable.getPaint().setStyle(Paint.Style.STROKE);
                        // myShapeDrawable.getPaint().setStrokeWidth(Density.getInstence(context).dip2px(2));
                        // myShapeDrawable.getPaint().setColor(0xff241e5a);
                        // myShapeDrawable.setBounds(0, 0, (int) (mWidth * 0.5),
                        // Density.getInstence(context).dip2px(35));
                        myShapeDrawable.getPaint().setStyle(Paint.Style.FILL);
                        myShapeDrawable.getPaint().setColor(0xffcccccc);
                        myShapeDrawable.setBounds(0, 0, (int) (mWidth * 0.7 / 2), Density.getInstence(context).dip2px(35));
    
                    }
    
                    myShapeDrawable.draw(canvas);
    
                }
            };
        }
    
        class StypeEdit extends FrameLayout {
            String[] mSures;
            ReturnResults mReturnResult;
            String mTitle;
            String mText;
            Context mContext;
    
            public StypeEdit(Context context, String title, String text, String[] sure, ReturnResults returnResult) {
                super(context);
                // setBackgroun
                mContext = context;
                mSures = sure;
                mTitle = title;
                mText = text;
                mReturnResult = returnResult;
                initView();
            }
    
            @SuppressWarnings("deprecation")
            public void initView() {
                CustomDrawables custonm = new CustomDrawables(mContext, (int) (mWidth * 0.7f),
                        Density.getInstence(mContext).dip2px(60), 0);
                LinearLayout linear = new LinearLayout(mContext);
                linear.setOrientation(LinearLayout.VERTICAL);
                // linear.setBackgroundResource(R.drawable.linear_shape);
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7f),
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                TextView title = new TextView(mContext);
                // title.setBackgroundResource(R.drawable.title_shape);
                title.setBackgroundDrawable(custonm.paintDrawable());
                int padding = Density.getInstence(mContext).dip2px(10);
                title.setPadding(padding, padding, padding, padding);
                title.setText(mTitle);
                title.setGravity(Gravity.CENTER);
                title.setTextColor(Color.BLACK);
                TextPaint tp = title.getPaint();
                tp.setFakeBoldText(true);
                title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                final EditText edit = new EditText(mContext);
                edit.setBackgroundResource(color.white);
                edit.setTextColor(Color.BLACK);
                if (!TextUtils.isEmpty(mText)) {
                    edit.setText(mText);
                    edit.setSelection(mText.length());
                }
                LinearLayout sureLinear = new LinearLayout(mContext);
                LinearLayout.LayoutParams sureLinearParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(mContext).dip2px(50));
                sureLinearParams.weight = 1;
                Button cancelButton = new Button(mContext);
                cancelButton.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        dismiss();
    
                    }
                });
                custonm.setFlag(CustomDrawables.TYPE_LEFT_BUTTON);
                // cancelButton.setBackgroundResource(R.drawable.button_style_left);
                cancelButton.setBackgroundDrawable(custonm.paintDrawable());
                cancelButton.setTextColor(0xff5379b8);
                Button sureButton = new Button(mContext);
                // sureButton.setBackgroundResource(R.drawable.button_style_right);
                custonm.setFlag(CustomDrawables.TYPE_RIGHT_BUTTON);
                sureButton.setBackgroundDrawable(custonm.paintDrawable());
                sureButton.setTextColor(0xff5379b8);
                cancelButton.setText(mSures[0]);
                sureButton.setPadding(padding, padding, padding, padding);
                cancelButton.setPadding(padding, padding, padding, padding);
                cancelButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                sureButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                sureButton.setText(mSures[1]);
                sureButton.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        if (!TextUtils.isEmpty(edit.getText())) {
                            String message = edit.getText().toString();
                            mReturnResult.result(message);
                            dismiss();
                        }
                    }
                });
                sureLinear.addView(cancelButton, sureLinearParams);
                sureLinear.addView(sureButton, sureLinearParams);
                linear.addView(title, sureLinearParams);
                linear.addView(edit, linearParams);
                linear.addView(sureLinear, linearParams);
                this.addView(linear);
                if (sTypeface != null) {
                    title.setTypeface(sTypeface);
                    edit.setTypeface(sTypeface);
                    cancelButton.setTypeface(sTypeface);
                    sureButton.setTypeface(sTypeface);
                }
    
            }
    
        }
    
        class DialogChoose extends FrameLayout {
            String mTitle = "title";
            String mMessage = "messgemessgemessgemessgemessgemessgemessgemessgemessgemessge";
            String[] buttonText = { "YES", "NO" };
            Context mContext;
            ReturnResults results;
    
            public DialogChoose(Context context, String title, String message, ReturnResults results) {
                super(context);
                mContext = context;
                mTitle = title;
                mMessage = message;
                this.results = results;
                initView();
            }
    
            @SuppressWarnings("deprecation")
            public void initView() {
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7),
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                LinearLayout linearLayout = new LinearLayout(mContext);
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                TextView titleText = new TextView(mContext);
                titleText.setText(mTitle);
                int padding = Density.getInstence(mContext).dip2px(10);
                titleText.setPadding(padding, padding, padding, 0);
                titleText.setGravity(Gravity.CENTER);
                titleText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
                titleText.setTextColor(Color.BLACK);
                TextPaint tp = titleText.getPaint();
                tp.setFakeBoldText(true);
                titleText.setGravity(Gravity.CENTER);
                CustomDrawables customs = new CustomDrawables(getContext(), (int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(60), 5);
                titleText.setBackgroundDrawable(customs.paintDrawable());
                TextView messageText = new TextView(mContext);
                messageText.setText(mMessage + "?");
                messageText.setTextColor(Color.BLACK);
                messageText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                messageText.setGravity(Gravity.CENTER);
                messageText.setBackgroundColor(Color.WHITE);
                messageText.setPadding(padding, 0, padding, padding);
                LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(50));
                buttonParams.weight = 1;
                LinearLayout buttonLayout = new LinearLayout(mContext);
                buttonLayout.setOrientation(LinearLayout.HORIZONTAL);
                Button noText = new Button(mContext);
                customs.setFlag(CustomDrawables.TYPE_LEFT_BUTTON);
                noText.setBackground(customs.paintDrawable());
                noText.setGravity(Gravity.CENTER);
                noText.setTextColor(0xff5379b8);
                noText.setText(buttonText[1]);
                noText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                noText.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        results.result("no");
                        dismiss();
                    }
                });
                Button yesText = new Button(mContext);
                yesText.setTextColor(0xff5379b8);
                yesText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18F);
                yesText.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        results.result("yes");
                        dismiss();
                    }
                });
    
                customs.setFlag(CustomDrawables.TYPE_RIGHT_BUTTON);
                yesText.setText(buttonText[0]);
                yesText.setGravity(Gravity.CENTER);
                yesText.setBackground(customs.paintDrawable());
                buttonLayout.addView(noText, buttonParams);
                View btnView = new View(mContext);
                btnView.setBackgroundColor(0xffcccccc);
                buttonLayout.addView(btnView, Density.getInstence(mContext).dip2px((float) 0.5),
                        LinearLayout.LayoutParams.MATCH_PARENT);
                buttonLayout.addView(yesText, buttonParams);
                linearLayout.addView(titleText, LinearLayout.LayoutParams.MATCH_PARENT,
                        Density.getInstence(mContext).dip2px(50));
                View titleView = new View(mContext);
                titleView.setBackgroundColor(0xffcccccc);
                // linearLayout.addView(titleView,
                // LinearLayout.LayoutParams.MATCH_PARENT,
                // Density.getInstence(mContext).dip2px((float) 0.5));
                linearLayout.addView(messageText);
                View messageView = new View(mContext);
                messageView.setBackgroundColor(0xffcccccc);
                linearLayout.addView(messageView, LinearLayout.LayoutParams.MATCH_PARENT,
                        Density.getInstence(mContext).dip2px((float) 0.5));
                linearLayout.addView(buttonLayout);
                addView(linearLayout, linearParams);
                if (sTypeface != null) {
                    titleText.setTypeface(sTypeface);
                    messageText.setTypeface(sTypeface);
                    noText.setTypeface(sTypeface);
                    yesText.setTypeface(sTypeface);
                }
            }
    
        }
    
        class DialogAlert extends FrameLayout {
            String mTitle = "title";
            String mMessage = "messge";
            String buttonText = "OK";
            Context mContext;
    
            public DialogAlert(Context context, String title, String message) {
                super(context);
                mContext = context;
                mTitle = title;
                mMessage = message;
                initView();
            }
    
            public void initView() {
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7),
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                LinearLayout linearLayout = new LinearLayout(mContext);
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                TextView titleText = new TextView(mContext);
                titleText.setText(mTitle);
                TextPaint tp = titleText.getPaint();
                titleText.setTextColor(Color.BLACK);
                tp.setFakeBoldText(true);
                int padding = Density.getInstence(mContext).dip2px(10);
                titleText.setPadding(padding, padding, padding, 0);
                titleText.setGravity(Gravity.CENTER);
                titleText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
                titleText.setGravity(Gravity.CENTER);
                CustomDrawables customs = new CustomDrawables(getContext(), (int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(60), 5);
                titleText.setBackground(customs.paintDrawable());
                TextView messageText = new TextView(mContext);
                messageText.setText(mMessage);
                messageText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                messageText.setGravity(Gravity.CENTER);
                messageText.setBackgroundColor(Color.WHITE);
                LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(50));
                messageText.setTextColor(Color.BLACK);
                messageText.setPadding(padding, 0, padding, padding);
                Button Text = new Button(mContext);
                Text.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        dismiss();
    
                    }
                });
                customs.setFlag(CustomDrawables.TYPE_BUTTON);
                // CustomDrawables customs1 = new CustomDrawables(getContext(),
                // (int) (mWidth * 0.7),
                // Density.getInstence(mContext).dip2px(40),
                // CustomDrawables.TYPE_LEFT_BUTTON);
                Text.setBackground(customs.paintDrawable());
                Text.setGravity(Gravity.CENTER);
                Text.setText(buttonText);
                Text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18F);
                Text.setTextColor(0xff5379b8);
                linearLayout.addView(titleText, LinearLayout.LayoutParams.MATCH_PARENT,
                        Density.getInstence(mContext).dip2px(50));
                View titleView = new View(mContext);
                titleView.setBackgroundColor(0xffcccccc);
                // linearLayout.addView(titleView,
                // LinearLayout.LayoutParams.MATCH_PARENT,
                // Density.getInstence(mContext).dip2px((float) 0.5));
                linearLayout.addView(messageText);
                View messageView = new View(mContext);
                messageView.setBackgroundColor(0xffcccccc);
                linearLayout.addView(messageView, LinearLayout.LayoutParams.MATCH_PARENT,
                        Density.getInstence(mContext).dip2px((float) 0.5));
                linearLayout.addView(Text, buttonParams);
                addView(linearLayout, linearParams);
                if (sTypeface != null) {
                    titleText.setTypeface(sTypeface);
                    messageText.setTypeface(sTypeface);
                    Text.setTypeface(sTypeface);
                }
            }
    
        }
    
        class ButtonStateColor extends Drawable {
            int direction = 0;
            boolean ischeck = false;
            int mCorner = Density.getInstence(getContext()).dip2px(8);
            float[] jouterR;
            int w;
            int color = Color.WHITE;
    
            public ButtonStateColor(boolean ischeck, int direction) {
                this.direction = direction;
                this.ischeck = ischeck;
            }
    
            @Override
            public void draw(Canvas canvas) {
                if (ischeck) {
                    switch (direction) {
                    case 0:
                        w = (int) (mWidth * 0.7);
                        jouterR = new float[] { 0, 0, 0, 0, mCorner, mCorner, mCorner, mCorner };
                        break;
                    case 1:
                        w = (int) (mWidth * 0.7) / 2;
                        jouterR = new float[] { 0, 0, 0, 0, 0, 0, mCorner, mCorner };
                        break;
                    case 2:
                        w = (int) (mWidth * 0.7) / 2;
                        jouterR = new float[] { 0, 0, 0, 0, mCorner, mCorner, 0, 0 };
                        break;
                    case 3:
                        w = (int) (mWidth * 0.7);
                        jouterR = new float[] { mCorner, mCorner, mCorner, mCorner, 0, 0, 0, 0 };
                        break;
    
                    default:
                        break;
                    }
    
                } else {
                    color = Color.TRANSPARENT;
                    switch (direction) {
                    case 0:
                        w = (int) (mWidth * 0.7);
                        jouterR = new float[] { 0, 0, 0, 0, mCorner, mCorner, mCorner, mCorner };
                        break;
                    case 1:
                        w = (int) (mWidth * 0.7) / 2;
                        jouterR = new float[] { 0, 0, 0, 0, 0, 0, mCorner, mCorner };
                        break;
                    case 2:
                        w = (int) (mWidth * 0.7) / 2;
                        jouterR = new float[] { 0, 0, 0, 0, mCorner, mCorner, 0, 0 };
                        break;
    
                    default:
                        break;
                    }
                    ShapeDrawable myShapeDrawable = new ShapeDrawable(new RoundRectShape(jouterR, null, null));
                    myShapeDrawable.getPaint().setColor(color);
                    myShapeDrawable.setBounds(0, 0, w, Density.getInstence(getContext()).dip2px(50));
                    myShapeDrawable.draw(canvas);
                }
            }
    
            @Override
            public void setAlpha(int alpha) {
    
            }
    
            @Override
            public void setColorFilter(ColorFilter colorFilter) {
    
            }
    
            @Override
            public int getOpacity() {
                return 0;
            }
        }
    
        class DialogComfirm extends FrameLayout {
            Context mContext;
            String mMessage;
    
            public DialogComfirm(Context context, String message, ReturnResults results) {
                super(context);
                mContext = context;
                mMessage = message;
                initView();
            }
    
            @SuppressWarnings("deprecation")
            public void initView() {
                CustomDrawables custom = new CustomDrawables(mContext, (int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(110), CustomDrawables.TYPE_PROGRESS);
                LinearLayout linear = new LinearLayout(mContext);
                linear.setBackgroundDrawable(custom.paintDrawable());
                linear.setOrientation(LinearLayout.VERTICAL);
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7f),
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                LinearLayout.LayoutParams contextParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(mContext).dip2px(60));
                contextParams.topMargin = Density.getInstence(mContext).dip2px(10);
                contextParams.leftMargin = Density.getInstence(mContext).dip2px(20);
                contextParams.rightMargin = Density.getInstence(mContext).dip2px(20);
                contextParams.bottomMargin = Density.getInstence(mContext).dip2px(5);
    
                TextView messText = new TextView(mContext);
                messText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17f);
                messText.setText(mMessage);
                messText.setTextColor(Color.BLACK);
                messText.setGravity(Gravity.CENTER_VERTICAL);
                linear.addView(messText, contextParams);
                View messageView = new View(mContext);
                messageView.setBackgroundColor(0xffcccccc);
                LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                        Density.getInstence(mContext).dip2px((float) 0.5));
                // linear.addView(messageView, viewParams);
                int padding = Density.getInstence(mContext).dip2px(10);
                LinearLayout sureLinear = new LinearLayout(mContext);
                LinearLayout.LayoutParams sureLinearParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(mContext).dip2px(50));
                sureLinearParams.weight = 1;
                Button cancelButton = new Button(mContext);
                cancelButton.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        dismiss();
    
                    }
                });
                custom.setFlag(CustomDrawables.TYPE_LEFT_BUTTON);
                // cancelButton.setBackgroundResource(R.drawable.button_style_left);
                cancelButton.setBackgroundDrawable(custom.paintDrawable());
                cancelButton.setTextColor(0xff5379b8);
                Button sureButton = new Button(mContext);
                // sureButton.setBackgroundResource(R.drawable.button_style_right);
                custom.setFlag(CustomDrawables.TYPE_RIGHT_BUTTON);
                sureButton.setBackgroundDrawable(custom.paintDrawable());
                sureButton.setTextColor(0xff5379b8);
                cancelButton.setText("NO");
                sureButton.setPadding(padding, padding, padding, padding);
                cancelButton.setPadding(padding, padding, padding, padding);
                cancelButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                sureButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                sureButton.setText("YES");
                sureButton.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        mReturnResult.result("YES");
                        dismiss();
                    }
                });
                View btnView = new View(mContext);
                btnView.setBackgroundColor(0xffcccccc);
                sureLinear.addView(cancelButton, sureLinearParams);
                sureLinear.addView(btnView, Density.getInstence(mContext).dip2px((float) 0.5),
                        Density.getInstence(mContext).dip2px(50));
                sureLinear.addView(sureButton, sureLinearParams);
    
                linear.addView(sureLinear, linearParams);
    
                this.addView(linear, linearParams);
                if (sTypeface != null) {
                    messText.setTypeface(sTypeface);
                    cancelButton.setTypeface(sTypeface);
                    sureButton.setTypeface(sTypeface);
                }
    
            }
    
        }
    
        class StypeProgress extends FrameLayout {
            int mMaxlength;
            Context mContext;
            ProgressBar mProgress;
            int mProgressColor = 0xff69af2a;
            int mProgressBackColor = Color.BLACK;
            int time = 1;
            String titleText = "下载信息";
    
            public StypeProgress(Context context, int length, String titleText) {
                super(context);
                mMaxlength = 60;
                mContext = context;
                this.titleText = titleText;
                initView();
            }
    
            int mlength, progressWidth;
    
            @SuppressWarnings("deprecation")
            public void initView() {
                LinearLayout linear = new LinearLayout(mContext);
                linear.setOrientation(LinearLayout.VERTICAL);
                CustomDrawables custom = new CustomDrawables(mContext, (int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(100), CustomDrawables.TYPE_PROGRESS);
                // linear.setBackgroundResource(R.drawable.linear_shape);
                linear.setBackgroundDrawable(custom.paintDrawable());
                linear.setOrientation(LinearLayout.VERTICAL);
                // linear.setGravity(Gravity.CENTER);
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7f),
                        Density.getInstence(mContext).dip2px(100));
                LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7f),
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                titleParams.bottomMargin = Density.getInstence(mContext).dip2px(10);
                titleParams.leftMargin = Density.getInstence(mContext).dip2px(15);
                titleParams.topMargin = Density.getInstence(mContext).dip2px(20);
                titleParams.rightMargin = Density.getInstence(mContext).dip2px(5);
                mlength = (int) (mWidth * 0.77) / mMaxlength;
                progressWidth = mlength;
                TextView title = new TextView(mContext);
                title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                if (sTypeface != null) {
                    title.setTypeface(sTypeface);
    
                }
                title.setText("下载信息");
                linear.addView(title, titleParams);
                mProgress = new ProgressBar(mContext, null, android.R.attr.progressBarStyleHorizontal);
                mProgress.setProgressDrawable(new Drawable() {
    
                    @Override
                    public void setColorFilter(ColorFilter colorFilter) {
    
                    }
    
                    @Override
                    public void setAlpha(int alpha) {
    
                    }
    
                    @Override
                    public int getOpacity() {
                        return 0;
                    }
    
                    @Override
                    public void draw(Canvas canvas) {
                        Paint p = new Paint();
                        p.setAntiAlias(true);
                        p.setColor(0xff3a3a3a);
                        int r = Density.getInstence(mContext).dip2px(3);
                        int rp = Density.getInstence(mContext).dip2px(1);
                        RectF backrect = new RectF(0, 0, (float) (mWidth * 0.77), Density.getInstence(mContext).dip2px(16));
    
                        canvas.drawRoundRect(backrect, r, r, p);
                        p.setColor(mProgressColor);
    
                        RectF rect = new RectF(1, Density.getInstence(mContext).dip2px(1), progressWidth,
                                Density.getInstence(mContext).dip2px(15));
                        canvas.drawRoundRect(rect, rp, rp, p);
    
                        p.setColor(Color.BLACK);
                        p.setTextSize(Density.getInstence(mContext).sp2px(8));
                        if (time < mMaxlength) {
                            canvas.drawText(time + "%", progressWidth - Density.getInstence(mContext).dip2px(6),
                                    Density.getInstence(mContext).dip2px(11), p);
                        }
    
                        progressWidth = progressWidth + mlength;
    
                        if (progressWidth < mWidth * 0.77) {
    
                            ++time;
                            if (time > mMaxlength) {
                                time = mMaxlength;
                            }
                            invalidateSelf();
                            try {
                                if (time > 3)
                                    Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
    
                    }
                });
    
                mProgress.setMax(mMaxlength);
    
                LinearLayout.LayoutParams contextParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                contextParams.leftMargin = Density.getInstence(mContext).dip2px(5);
                contextParams.rightMargin = Density.getInstence(mContext).dip2px(5);
                linear.addView(mProgress, contextParams);
    
                addView(linear, linearParams);
    
            }
    
        }
    
        class StypeRadio extends FrameLayout {
            private Context mContext;
            ReturnResults mReturnResult;
            List<String> mRadioItems;
            String mRadioTitle, mRadioButton;
            int position = 0;
    
            public StypeRadio(Context context, String title, List<String> string, String button,
                    ReturnResults returnResult) {
                super(context);
                mContext = context;
                mRadioItems = string;
                mRadioTitle = title;
                mReturnResult = returnResult;
                mRadioButton = button;
                initView();
            }
    
            @SuppressWarnings("deprecation")
            public void initView() {
                LinearLayout linear = new LinearLayout(mContext);
                CustomDrawables custom = new CustomDrawables(mContext, (int) (mWidth * 0.7),
                        Density.getInstence(mContext).dip2px(50), CustomDrawables.TYPE_TITLE);
                linear.setOrientation(LinearLayout.VERTICAL);
                linear.setGravity(Gravity.CENTER);
                // linear.setBackgroundResource(R.drawable.linear_shape);
                // linear.setBackground(custom.paintDrawable());
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7f),
                        (int) (mHeitht * 0.7f));
                TextView textView = new TextView(mContext);
                ListView listView = new ListView(mContext);
    
                listView.setBackgroundColor(Color.WHITE);
    
                int padding = Density.getInstence(mContext).dip2px(10);
                textView.setPadding(padding, padding, padding, padding);
                textView.setText(mRadioTitle);
                TextPaint tp = textView.getPaint();
                tp.setFakeBoldText(true);
                textView.setTextColor(Color.BLACK);
                textView.setGravity(Gravity.CENTER);
                textView.setBackgroundDrawable(custom.paintDrawable());
                textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                LinearLayout.LayoutParams contextParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(mContext).dip2px(50));
                linear.addView(textView, contextParams);
                linear.addView(listView, LinearLayout.LayoutParams.MATCH_PARENT, (int) (mHeitht * 0.3f));
                Button sureButton = new Button(mContext);
                sureButton.setText(mRadioButton);
                sureButton.setClickable(false);
                sureButton.setTextColor(0xff5379b8);
                sureButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                listView.setVerticalScrollBarEnabled(false);
                custom.setFlag(CustomDrawables.TYPE_BUTTON);
                sureButton.setBackgroundDrawable(custom.paintDrawable());
                sureButton.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        dismiss();
                        mReturnResult.result(mRadioItems.get(position));
                    }
                });
                // sureButton.setBackgroundResource(R.drawable.button_style_left);
                linear.addView(sureButton, LinearLayout.LayoutParams.MATCH_PARENT,
                        Density.getInstence(mContext).dip2px(50));
    
                final ListViewAdapter mListViewAdapter = new ListViewAdapter(mContext, mRadioItems);
                listView.setAdapter(mListViewAdapter);
                StateListDrawable state = new StateListDrawable();
    
                state.addState(new int[] { android.R.attr.state_pressed }, new ColorDrawable(0xffcccccc));
    
                listView.setSelector(state);
                listView.setOnItemClickListener(new OnItemClickListener() {
    
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int positio, long id) {
                        mListViewAdapter.setSelectID(positio); // 选中位置
                        mListViewAdapter.notifyDataSetChanged(); // 刷新适配器
                        position = positio;
                        // RadioButton rb = (RadioButton)
                        // view.findViewById(0x10002);
                        // rb.setChecked(true);
                        // mReturnResult.result(mRadioItems.get(position));
    
                    }
                });
                if (sTypeface != null) {
                    textView.setTypeface(sTypeface);
                    sureButton.setTypeface(sTypeface);
                }
    
                // 自定义回调函数
                mListViewAdapter.setOncheckChanged(new OnMyCheckChangedListener() {
    
                    @Override
                    public void setSelectID(int selectID) {
                        mListViewAdapter.setSelectID(selectID); // 选中位置
                        mListViewAdapter.notifyDataSetChanged(); // 刷新适配器
                    }
                });
                addView(linear, linearParams);
            }
    
        }
    
        class StypeLoading extends FrameLayout {
    
            String mTitle;
            Context mContext;
            ImageView mImage;
    
            int h, w;
    
            public StypeLoading(Context context, String title) {
                super(context);
                mTitle = title;
                mContext = context;
                initView();
            }
    
            @SuppressWarnings("deprecation")
            public void initView() {
                LinearLayout linearLayout = new LinearLayout(mContext);
                linearLayout.setGravity(Gravity.CENTER);
    
                linearLayout.setOrientation(LinearLayout.VERTICAL);
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.4f),
                        (int) (mWidth * 0.4f));
                LinearLayout.LayoutParams contextParams = new LinearLayout.LayoutParams(
                        Density.getInstence(mContext).dip2px(60), Density.getInstence(mContext).dip2px(60));
                // contextParams.leftMargin = ((int) (mWidth * 0.3f) -
                // Density.getInstence(mContext).dip2px(70)) / 2;
                // contextParams.bottomMargin =
                // Density.getInstence(mContext).dip2px(30);
                // contextParams.topMargin =
                // Density.getInstence(mContext).dip2px(10);
                // contextParams.leftMargin = ((int) (mWidth * 0.3f) -
                // Density.getInstence(mContext).dip2px(70)) / 2;
                CustomDrawables customs = new CustomDrawables(mContext, (int) (mWidth * 0.4f), (int) (mWidth * 0.4f),
                        CustomDrawables.TYPE_DINGING_BACK);
                linearLayout.setBackgroundDrawable(customs.paintDrawable());
    
                linearLayout.getBackground().setAlpha(50);
                h = (int) (mWidth * 0.3 - Density.getInstence(mContext).dip2px(45));
                w = Density.getInstence(mContext).dip2px(60);
                h = w;
    
                mImage = new ImageView(mContext);
                mImage.setScaleType(ScaleType.CENTER_INSIDE);
    
                mImage.setImageDrawable(new Drawable() {
                    int height = Density.getInstence(mContext).dip2px(0);
                    int i = 0;
                    int rx = w / 2;
                    int ry = height + h / 2;
                    int c = Density.getInstence(mContext).dip2px(3);
                    int rectw = Density.getInstence(mContext).dip2px(5);
    
                    @Override
                    public void setColorFilter(ColorFilter colorFilter) {
                    }
    
                    @Override
                    public void setAlpha(int alpha) {
                    }
    
                    @Override
                    public int getOpacity() {
                        return 0;
                    }
    
                    @Override
                    public void draw(Canvas canvas) {
                        Paint paint = new Paint();
                        paint.setAntiAlias(true);
                        // canvas.drawBitmap(bitmap, matrix, paint);
                        RectF r = new RectF(rx - rectw / 2, height, rx + rectw / 2, height + h / 4f);
                        paint.setColor(0xffb4b4b4);
                        for (int i = 0; i < 12; i++) {
                            canvas.save();
                            canvas.rotate(30 * i, rx, ry);
                            canvas.drawRoundRect(r, c, c, paint);
                            canvas.restore();
                        }
    
                        if (i == 360) {
                            i = 0;
                        }
                        paint.setColor(Color.WHITE);
                        canvas.rotate(30 * i, rx, ry);
                        canvas.drawRoundRect(r, c, c, paint);
    
                        canvas.rotate(30, rx, ry);
                        canvas.drawRoundRect(r, c, c, paint);
                        paint.setColor(Color.WHITE);
                        canvas.rotate(30, rx, ry);
                        canvas.drawRoundRect(r, c, c, paint);
    
                        try {
                            Thread.sleep(60);
                            invalidateSelf();
                            i++;
    
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
    
                    }
                });
    
                TextView text = new TextView(mContext);
                text.setText("");
                text.setGravity(Gravity.CENTER_HORIZONTAL);
                text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
                // linearLayout.addView(text,LinearLayout.LayoutParams.MATCH_PARENT,Density.getInstence(mContext).dip2px(35));
                linearLayout.addView(mImage, contextParams);
                addView(linearLayout, linearParams);
            }
    
        }
    
        class CustomDrawables {
            int mCheckColor = 0xffCCCCCC;
            // int mNoCheckColor = 0xff1e1e1e;
            int mNoCheckColor = Color.WHITE;
            int mWidth, mHeight;
            int mCorner = 8;
            int mFlag;
            Context mContext;
            public final static int TYPE_TITLE = 0;
            public final static int TYPE_LEFT_BUTTON = 1;
            public final static int TYPE_RIGHT_BUTTON = 2;
            public final static int TYPE_PROGRESS = 3;
            public final static int TYPE_BUTTON = 4;
            public final static int TYPE_ALERT = 5;
            public final static int TYPE_ALERT_L = 6;
            public final static int TYPE_ALERT_R = 7;
            public final static int TYPE_ALERT_C = 8;
            public final static int TYPE_DINGING_BACK = 9;
    
            public CustomDrawables(Context context, int mWidth, int mHeight, int mFlag) {
                super();
                mContext = context;
                this.mWidth = mWidth;
                this.mHeight = mHeight;
                this.mFlag = mFlag;
                mCorner = Density.getInstence(context).dip2px(8);
            }
    
            public void setFlag(int flag) {
                this.mFlag = flag;
            }
    
            public Drawable paintDrawable() {
                Drawable drawable = null;
                switch (mFlag) {
                case TYPE_TITLE:
                    drawable = new TitleDrawable();
                    break;
                case TYPE_RIGHT_BUTTON:
                    drawable = new SelectorDrawable(TYPE_RIGHT_BUTTON).paint();
                    break;
                case TYPE_LEFT_BUTTON:
                    drawable = new SelectorDrawable(TYPE_LEFT_BUTTON).paint();
                    break;
                case TYPE_BUTTON:
                    drawable = new SelectorDrawable(TYPE_BUTTON).paint();
                    break;
                case TYPE_PROGRESS:
                    drawable = new TitleDrawable(TYPE_PROGRESS);
                    break;
                case TYPE_ALERT:
                    drawable = new TitleDrawable(TYPE_PROGRESS, 0);
                    break;
                case TYPE_ALERT_L:
                    drawable = new SelectorDrawable(TYPE_ALERT_L, 1).paint();
                    break;
                case TYPE_ALERT_R:
                    drawable = new SelectorDrawable(TYPE_ALERT_R, 1).paint();
                    break;
                case TYPE_ALERT_C:
                    drawable = new SelectorDrawable(TYPE_ALERT_C, 1).paint();
                    break;
                case TYPE_DINGING_BACK:
                    drawable = new TitleDrawable(TYPE_PROGRESS, "loading");
                    break;
    
                default:
                    break;
                }
    
                return drawable;
    
            }
    
            class TitleDrawable extends Drawable {
                int style;
                String backColor;
    
                public TitleDrawable() {
                    super();
    
                }
    
                public TitleDrawable(int style) {
                    super();
                    this.style = style;
    
                }
    
                public TitleDrawable(int style, int color) {
                    super();
                    this.style = CustomDrawables.TYPE_PROGRESS;
                    mNoCheckColor = Color.WHITE;
                }
    
                public TitleDrawable(int style, String color) {
                    super();
                    this.style = CustomDrawables.TYPE_PROGRESS;
                    mNoCheckColor = 0x7f000000;
                    backColor = color;
                }
    
                // 外部矩形弧度
                float[] outerR = new float[] { mCorner, mCorner, mCorner, mCorner, 0, 0, 0, 0 };
                // 内部矩形与外部矩形的距离
                RectF inset = new RectF(100, 100, 50, 50);
                // 内部矩形弧度
                float[] innerRadii = new float[] { 20, 20, 20, 20, 20, 20, 20, 20 };
    
                @Override
                public void draw(Canvas canvas) {
                    if (style == CustomDrawables.TYPE_PROGRESS) {
                        outerR = new float[] { mCorner, mCorner, mCorner, mCorner, mCorner, mCorner, mCorner, mCorner };
                    }
    
                    ShapeDrawable myShapeDrawable = new ShapeDrawable(new RoundRectShape(outerR, null, null));
    
                    myShapeDrawable.getPaint().setColor(mNoCheckColor);
                    myShapeDrawable.setBounds(0, 0, mWidth, mHeight);
                    myShapeDrawable.draw(canvas);
    
                }
    
                @Override
                public void setAlpha(int alpha) {
    
                }
    
                @Override
                public void setColorFilter(ColorFilter colorFilter) {
    
                }
    
                @Override
                public int getOpacity() {
                    return 0;
                }
    
            }
    
            class ButtonDrawable extends Drawable {
                boolean ischeck = false;
                int direction = 0;
                float[] outerR = new float[] { mCorner, mCorner, mCorner, mCorner, 0, 0, 0, 0 };
                int color = 0;
                int width;
    
                public ButtonDrawable(boolean ischeck, int direction) {
                    this.ischeck = ischeck;
                    this.direction = direction;
                }
    
                public ButtonDrawable(boolean ischeck, int direction, int color) {
                    this.ischeck = ischeck;
                    this.direction = direction;
                    if (color == 1) {
                        changeColor();
                    }
                }
    
                public void changeColor() {
                    mCheckColor = Color.WHITE;
                    mNoCheckColor = Color.RED;
                }
    
                @Override
                public void draw(Canvas canvas) {
                    if (ischeck) {
                        color = mCheckColor;
                        switch (direction) {
    
                        case TYPE_LEFT_BUTTON:
                            width = mWidth / 2;
                            outerR = new float[] { 0, 0, 0, 0, 0, 0, mCorner, mCorner };
                            break;
                        case TYPE_RIGHT_BUTTON:
                            width = mWidth / 2;
                            outerR = new float[] { 0, 0, 0, 0, mCorner, mCorner, 0, 0 };
                            break;
                        case TYPE_BUTTON:
                            width = mWidth;
                            outerR = new float[] { 0, 0, 0, 0, mCorner, mCorner, mCorner, mCorner };
                            break;
    
                        default:
                            break;
                        }
                    } else {
                        color = mNoCheckColor;
                        switch (direction) {
                        case TYPE_LEFT_BUTTON:
                            width = mWidth / 2;
                            outerR = new float[] { 0, 0, 0, 0, 0, 0, mCorner, mCorner };
                            break;
                        case TYPE_RIGHT_BUTTON:
                            width = mWidth / 2;
                            outerR = new float[] { 0, 0, 0, 0, mCorner, mCorner, 0, 0 };
                            break;
                        case TYPE_BUTTON:
                            width = mWidth;
                            outerR = new float[] { 0, 0, 0, 0, mCorner, mCorner, mCorner, mCorner };
                            break;
                        default:
                            break;
                        }
                    }
    
                    ShapeDrawable myShapeDrawable = new ShapeDrawable(new RoundRectShape(outerR, null, null));
                    myShapeDrawable.getPaint().setColor(color);
                    myShapeDrawable.setBounds(0, 0, width, Density.getInstence(mContext).dip2px(50));
                    myShapeDrawable.draw(canvas);
    
                }
    
                @Override
                public void setAlpha(int alpha) {
    
                }
    
                @Override
                public void setColorFilter(ColorFilter colorFilter) {
    
                }
    
                @Override
                public int getOpacity() {
                    return 0;
                }
    
            }
    
            class SelectorDrawable {
                int direction;
                int flag;
    
                public SelectorDrawable(int direction) {
                    super();
                    this.direction = direction;
                }
    
                public SelectorDrawable(int direction, int flag) {
                    super();
                    this.direction = direction;
                    this.flag = flag;
                }
    
                public Drawable paint() {
                    StateListDrawable sld = new StateListDrawable();
                    ButtonDrawable checkback, nocheckback;
                    if (flag == 1) {
                        checkback = new ButtonDrawable(true, direction, 1);
                        nocheckback = new ButtonDrawable(false, direction, 1);
                    } else {
                        checkback = new ButtonDrawable(true, direction);
                        nocheckback = new ButtonDrawable(false, direction);
    
                        sld.addState(new int[] { -android.R.attr.state_pressed }, nocheckback);
                        sld.addState(new int[] { android.R.attr.state_pressed }, checkback);
                    }
    
                    return sld;
    
                }
    
            }
    
        }
    
        class StyCancel extends FrameLayout {
            String[] text = { "continue", "cancel" };
            Context mContext;
            int mCorner;
    
            public StyCancel(Context context) {
                super(context);
                mContext = context;
                mCorner = Density.getInstence(mContext).dip2px(8);
                initView();
            }
    
            public void initView() {
                LinearLayout linear = new LinearLayout(mContext);
                LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams((int) (mWidth * 0.7),
                        LinearLayout.LayoutParams.WRAP_CONTENT | Gravity.BOTTOM);
                // linearParams.bottomMargin =
                // Density.getInstence(mContext).dip2px(10);
                linear.setOrientation(LinearLayout.VERTICAL);
    
                Button continueText = new Button(mContext);
                continueText.setGravity(Gravity.CENTER);
                continueText.setText(text[0]);
                StateListDrawable state = new StateListDrawable();
                state.addState(new int[] { android.R.attr.state_pressed }, new CanelDraw(0xffcccccc));
                state.addState(new int[] { -android.R.attr.state_pressed }, new CanelDraw(0x7f000000));
                continueText.setBackground(state);
                LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(getContext()).dip2px(35));
                // contentParams.bottomMargin =
                // Density.getInstence(mContext).dip2px(5);
                // linear.setGravity(Gravity.BOTTOM);
                // linear.setVisibility(View.INVISIBLE);
                View view = new View(mContext);
                view.setBackgroundColor(Color.TRANSPARENT);
    
                linear.addView(continueText, contentParams);
                linear.addView(view, LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(mContext).dip2px(5));
                Button cancelText = new Button(mContext);
                cancelText.setGravity(Gravity.CENTER);
                cancelText.setText(text[1]);
                StateListDrawable statecan = new StateListDrawable();
                statecan.addState(new int[] { android.R.attr.state_pressed }, new CanelDraw(0xffcccccc));
                statecan.addState(new int[] { -android.R.attr.state_pressed }, new CanelDraw(0x7f000000));
                Drawable draw = continueText.getBackground();
                cancelText.setBackground(statecan);
                linear.addView(cancelText, contentParams);
                View view1 = new View(mContext);
                view.setBackgroundColor(Color.TRANSPARENT);
    
                linear.addView(view1, LinearLayout.LayoutParams.MATCH_PARENT, Density.getInstence(mContext).dip2px(5));
                addView(linear, linearParams);
                if (sTypeface != null) {
                    continueText.setTypeface(sTypeface);
    
                    cancelText.setTypeface(sTypeface);
                }
            }
    
            class CanelDraw extends Drawable {
                int color;
    
                CanelDraw(int color) {
                    this.color = color;
                }
    
                @Override
                public void setColorFilter(ColorFilter colorFilter) {
    
                }
    
                @Override
                public void setAlpha(int alpha) {
    
                }
    
                @Override
                public int getOpacity() {
                    return 0;
                }
    
                @Override
                public void draw(Canvas canvas) {
                    float[] jouterR = new float[] { mCorner, mCorner, mCorner, mCorner, mCorner, mCorner, mCorner,
                            mCorner };
                    ShapeDrawable myShapeDrawable = new ShapeDrawable(new RoundRectShape(jouterR, null, null));
                    myShapeDrawable.getPaint().setColor(color);
                    myShapeDrawable.setBounds(0, 0, (int) (mWidth * 0.7), Density.getInstence(getContext()).dip2px(35));
                    myShapeDrawable.draw(canvas);
                }
    
            }
    
        }
    
        // 返回事件监听
        public interface ReturnResults {
            void result(Object o);
        }
    
        @SuppressWarnings("deprecation")
        public View radioItems() {
    
            LinearLayout contentlinear = new LinearLayout(getContext());
            contentlinear.setId(0x10000);
            TextView textview = new TextView(getContext());
            textview.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
            textview.setTextColor(Color.BLACK);
            textview.setId(0x10001);
            if (sTypeface != null) {
                textview.setTypeface(sTypeface);
            }
            textview.setPadding(Density.getInstence(getContext()).dip2px(10), 0, 0, 0);
            RadioButton radiobut = new RadioButton(getContext());
            radiobut.setFocusable(false);
            radiobut.setClickable(false);
            radiobut.setChecked(true);
            radiobut.setId(0x10002);
            radiobut.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
            StateListDrawable sld = new StateListDrawable();
            sld.addState(new int[] { -android.R.attr.state_checked }, new RadioDrawable(false));
            sld.addState(new int[] { android.R.attr.state_checked }, new RadioDrawable(true));
            radiobut.setBackgroundDrawable(sld);
            LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                    Density.getInstence(getContext()).dip2px(50));
            textParams.leftMargin = Density.getInstence(getContext()).dip2px(20);
            textParams.weight = 1;
            contentlinear.addView(textview, textParams);
            contentlinear.addView(radiobut, Density.getInstence(getContext()).dip2px(70),
                    Density.getInstence(getContext()).dip2px(50));
    
            return contentlinear;
    
        }
    
        class RadioDrawable extends Drawable {
            boolean mFlag;
            int ra, r, mSmallR;
    
            public RadioDrawable(boolean flag) {
                super();
                mFlag = flag;
                ra = Density.getInstence(getContext()).dip2px(25);
                r = Density.getInstence(getContext()).dip2px(10);
                mSmallR = Density.getInstence(getContext()).dip2px(5);
            }
    
            @Override
            public void draw(Canvas canvas) {
                // canvas.setDrawFilter(new PaintFlagsDrawFilter(0,
                // Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
                Paint paint = new Paint();
                paint.setAntiAlias(true);
                paint.setColor(Color.BLACK);
                if (mFlag) {
                    paint.setStyle(Paint.Style.STROKE);
                    canvas.drawCircle(ra, ra, r, paint);
                    paint.setStyle(Paint.Style.FILL);
                    canvas.drawCircle(ra, ra, mSmallR, paint);
    
                } else {
                    paint.setStyle(Paint.Style.STROKE);
                    canvas.drawCircle(ra, ra, r, paint);
                }
            }
    
            @Override
            public void setAlpha(int alpha) {
    
            }
    
            @Override
            public void setColorFilter(ColorFilter colorFilter) {
    
            }
    
            @Override
            public int getOpacity() {
                return 0;
            }
    
        }
    
        class ListViewAdapter extends BaseAdapter {
            private List<String> list;
            private int selectID;
    
            private OnMyCheckChangedListener mCheckChange;
    
            // 构造函数,用作初始化各项数据
            public ListViewAdapter(Context context, List<String> list) {
                this.list = list;
            }
    
            // 获取ListView的item总数
            public int getCount() {
                return list.size();
            }
    
            // 获取ListView的item
            public Object getItem(int position) {
                return getItem(position);
            }
    
            // 获取ListView的item的ID
            public long getItemId(int position) {
                return position;
            }
    
            // 自定义的选中方法
            public void setSelectID(int position) {
                selectID = position;
            }
    
            // 获取item的视图及其中含有的操作
            public View getView(final int position, View convertView, ViewGroup parent) {
                ViewCache viewCache;
    
                /**
                 * 这个是网上流行的适配器缓存View写法(软引用原理),就不多说了。
                 */
                if (convertView == null) {
                    viewCache = new ViewCache();
                    // convertView =
                    // LayoutInflater.from(context).inflate(R.layout.list_item,
                    // null);
                    convertView = radioItems();
                    viewCache.linearLayout = (LinearLayout) convertView.findViewById(0x10000);
    
                    viewCache.itemName = (TextView) convertView.findViewById(0x10001);
                    viewCache.radioBtn = (RadioButton) convertView.findViewById(0x10002);
    
                    convertView.setTag(viewCache);
                } else {
                    viewCache = (ViewCache) convertView.getTag();
                }
    
                viewCache.itemName.setText(list.get(position));
    
                // // 核心方法,判断单选按钮被按下的位置与之前的位置是否相等,然后做相应的操作。
                if (selectID == position) {
                    // // viewCache.linearLayout.setBackgroundColor(Color.BLUE);
                    viewCache.radioBtn.setChecked(true);
                } else {
                    // // viewCache.linearLayout.setBackgroundColor(0);
                    viewCache.radioBtn.setChecked(false);
                }
                StateListDrawable state = new StateListDrawable();
                // state.addState(new int[] { -android.R.attr.state_pressed }, new
                // ColorDrawable(0x000000000));
                // state.addState(new int[] { android.R.attr.state_pressed }, new
                // ColorDrawable(0xddddddd));
                // viewCache.linearLayout.setBackgroundDrawable(state);
                // 单选按钮的点击事件监听
                // 单选按钮的点击事件监听
                // viewCache.radioBtn.setonc
    
                return convertView;
            }
    
            // 回调函数,很类似OnClickListener吧,呵呵
            public void setOncheckChanged(OnMyCheckChangedListener l) {
                mCheckChange = l;
            }
    
            // 缓存类
            class ViewCache {
                LinearLayout linearLayout;
                TextView itemID, itemName;
                RadioButton radioBtn;
            }
        }
    
        static class Density {
    
            private static Density sDensity;
    
            public static final float DEFAULT_SCALE = 2;
    
            public static Density getInstence(Context context) {
                if (sDensity == null) {
                    sDensity = new Density(context);
                }
                return sDensity;
            }
    
            private DisplayMetrics mDM;
            private float scale;
            private float fontScale;
            private int mStatusBarHeight;
    
            public Density(Context context) {
                mDM = context.getResources().getDisplayMetrics();
                scale = mDM.density;
                fontScale = mDM.scaledDensity;
                mStatusBarHeight = getStatusBarHeight(context);
            }
    
            private int getStatusBarHeight(Context context) {
                int result = 0;
                int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
                if (resourceId > 0) {
                    result = context.getResources().getDimensionPixelSize(resourceId);
                }
                return result;
            }
    
            public int getStatusBarHeight() {
                return mStatusBarHeight;
            }
    
            public int getScreenWidth() {
                return mDM.widthPixels;
            }
    
            public int getScreenHeight() {
                return mDM.heightPixels;
            }
    
            public int dip2px(float dpValue) {
                return (int) (dpValue * scale + 0.5f);
            }
    
            public int px2dip(float pxValue) {
                return (int) (pxValue / scale + 0.5f);
            }
    
            public int px2sp(float pxValue) {
                return (int) (pxValue / fontScale + 0.5f);
            }
    
            public int sp2px(float spValue) {
                return (int) (spValue * fontScale + 0.5f);
            }
        }
    
        // 单选框选中监听
        public interface OnMyCheckChangedListener {
            void setSelectID(int selectID);
        }
    
    }
  • 相关阅读:
    蓝凌OA 后台URL跳转(鸡肋0day)
    蓝凌后台注入分析
    蓝凌ssrf+xmldecoder
    shiro550反序列化复现
    BCEL ClassLoader加载字节码
    TemplatesImple链加载字节码
    ysoserial Commons Collections3反序列化研究
    Xstream远程代码执行(CVE-2020-26217)复现分析
    Java安全之命令执行(二)
    Java安全之命令执行(一)
  • 原文地址:https://www.cnblogs.com/g-sheng/p/5406516.html
Copyright © 2020-2023  润新知