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

}
原文地址:https://www.cnblogs.com/g-sheng/p/5406516.html