Skip to content

youlookwhat/CustomViewStudy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CustomViewStudy

主要参照Hongyang的CSDN博客所写,具体细节优化请见这里。如有错误欢迎指正,如有侵权,请联系我删除。

Blog Catalogue

Source Code

Picture

Code Optimization

1.1 关于文字显示优化:

//             int textWidth = mRect.width(); // 这样mRect.width()直接计算出来的会有误差
               float textWidth = mPaint.measureText(mTitleText);

//              int textHeight = mRect.height(); //直接计算出来的会有误差
                Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
                float textHeight = Math.abs((fontMetrics.bottom - fontMetrics.top));

1.2 onDraw里画Text时起点坐标优化:

canvas.drawText(mTitleText, getWidth() / 2 - mRect.width() / 2 - mRect.left, getHeight() / 2 + mRect.height() / 2, mPaint);

canvas.drawText(String text,float x,float y,Paint paint); x和y是绘制时的起点坐标(左下角);

" - mRect.left": 就很标准,居中显示(csdn:yql_running解决)

2. 圆环交替 等待效果优化

2.1 新开线程画线,离开页面时线程未关闭优化

// 用来开关线程
    private boolean isContinue;
    
    // 绘图线程
        new Thread() {
            public void run() {
                while (isContinue) {
                    mProgress++;
                    if (mProgress == 360) {
                        mProgress = 0;
                        isNext = !isNext;
                    }
                    Log.e("--------", "在执行..");
                    postInvalidate();

                    try {
                        Thread.sleep(100 / mSpeed);// 这里优化了一下,值越大,速度越快
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        }.start();

Activity相关代码:

@Override
    protected void onStop() {
        super.onStop();
        customProgressBar01.setContinue(false);
        customProgressBar02.setContinue(false);
        customProgressBar03.setContinue(false);
    }

2.2 用户宽高若设置wrap_content时优化

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int modeWidth = MeasureSpec.getMode(widthMeasureSpec);
        int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);

        if (modeWidth == MeasureSpec.EXACTLY) {
            width = sizeWidth;
        } else {//默认宽度200dp
            width = (int) getContext().getResources().getDimension(R.dimen.width);
        }
        Log.e("------------->", "width:" + width);
        setMeasuredDimension(width, width);
    }

Download

Reference

Thanks

About

This repository is used to learn CustomView(Text、Image、Progress、ViewGroup、ViewGragHelper).

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages