安卓自定义Dialog(四)

来源:互联网 发布:js手机号正则表达式 编辑:程序博客网 时间:2024/05/01 03:09

这次的自定义Dialog增加了自定义小滚轮和提示文字。

先来看下效果图:


实现功能的代码:

CircularRing mLoadingView;    Dialog mLoadingDialog;    public DialogLoading(Context context) {        this(context, "正在加载");    }    public DialogLoading(Context context, String msg) {        // 首先得到整个View        View view = LayoutInflater.from(context).inflate(                R.layout.loading_dialog_view, null);        DisplayMetrics dm = context.getResources().getDisplayMetrics();        // 获取整个布局        LinearLayout layout = (LinearLayout) view.findViewById(R.id.dialog_view);        // 页面中的LoadingView        mLoadingView = (CircularRing) view.findViewById(R.id.lv_circularring);        // 页面中显示文本        TextView loadingText = (TextView) view.findViewById(R.id.loading_text);        // 显示文本        loadingText.setText(msg);        // 创建自定义样式的Dialog        mLoadingDialog = new Dialog(context, R.style.dialog);        // 设置返回键无效        mLoadingDialog.setCancelable(false);        mLoadingDialog.setContentView(layout, new LinearLayout.LayoutParams(                dm.widthPixels * 1 / 3,                LinearLayout.LayoutParams.MATCH_PARENT));    }    public void show() {        if (mLoadingDialog != null) {            mLoadingDialog.show();            mLoadingView.startAnim();        }    }    public void close() {        if (mLoadingDialog != null) {            mLoadingView.stopAnim();            mLoadingDialog.dismiss();            mLoadingDialog = null;        }    }

布局代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/dialog_view"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/dialogloading_bg"    android:gravity="center"    android:orientation="vertical"    android:padding="20dp">    <com.lcb.view.CircularRing        android:id="@+id/lv_circularring"        android:layout_width="50dp"        android:layout_height="50dp"/>    <TextView        android:id="@+id/loading_text"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:gravity="center_horizontal"        android:textColor="#ffffff"        android:textSize="15sp"/></LinearLayout>
自定义view:CircularRing

public class CircularRing extends View{    private float mWidth = 0f;    private float mPadding = 0f;    private float startAngle = 0f;    private Paint mPaint;    public CircularRing(Context context) {        this(context, null);    }    public CircularRing(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public CircularRing(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initPaint();    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        if (getMeasuredWidth() > getHeight())            mWidth = getMeasuredHeight();        else            mWidth = getMeasuredWidth();        mPadding = 5;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        mPaint.setColor(Color.argb(100, 255, 255, 255));        canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2 - mPadding, mPaint);        mPaint.setColor(Color.WHITE);        RectF rectF = new RectF(mPadding, mPadding, mWidth - mPadding, mWidth - mPadding);        canvas.drawArc(rectF, startAngle, 100                , false, mPaint);//第四个参数是否显示半径    }    private void initPaint() {        mPaint = new Paint();        mPaint.setAntiAlias(true);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setColor(Color.WHITE);        mPaint.setStrokeWidth(8);    }    public void startAnim() {        stopAnim();        startViewAnim(0f, 1f, 1000);    }    public void stopAnim() {        if (valueAnimator != null) {            clearAnimation();            valueAnimator.setRepeatCount(1);            valueAnimator.cancel();            valueAnimator.end();        }    }    ValueAnimator valueAnimator;    private ValueAnimator startViewAnim(float startF, final float endF, long time) {        valueAnimator = ValueAnimator.ofFloat(startF, endF);        valueAnimator.setDuration(time);        valueAnimator.setInterpolator(new LinearInterpolator());        valueAnimator.setRepeatCount(ValueAnimator.INFINITE);//无限循环        valueAnimator.setRepeatMode(ValueAnimator.RESTART);//        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                float value = (float) valueAnimator.getAnimatedValue();                startAngle = 360 * value;                invalidate();            }        });        valueAnimator.addListener(new AnimatorListenerAdapter() {            @Override            public void onAnimationEnd(Animator animation) {                super.onAnimationEnd(animation);            }        });        if (!valueAnimator.isRunning()) {            valueAnimator.start();        }        return valueAnimator;    }}







原创粉丝点击