Android8.1 Launcher3 修改PageIndicatorLineCaret为小圆点

Android8.1 Launcher3 修改PageIndicatorLineCaret为小圆点

原生Launcher的PageIndicatorLineCaret是横线,而且在手指离开屏幕后会消失。
现在修改为小圆点,不消失,先上图:
这里写图片描述

直接在原有基础上修改
src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java

增加两个变量:

//当前页面index
private int mActivePage;
//小圆点画笔
private Paint mDotPaint;

初始化:

mDotPaint = new Paint();
mDotPaint.setAntiAlias(true);

src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java -> onDraw():

 @Override
    protected void onDraw(Canvas canvas) {
        /* 修改 begin */
//        if (mTotalScroll == 0 || mNumPagesFloat == 0) {
//            return;
//        }

        // Compute and draw line rect.
        /*float progress = Utilities.boundToRange(((float) mCurrentScroll) / mTotalScroll, 0f, 1f);
        int availableWidth = canvas.getWidth();
        int lineWidth = (int) (availableWidth / mNumPagesFloat);
        int lineLeft = (int) (progress * (availableWidth - lineWidth));
        int lineRight = lineLeft + lineWidth;
        canvas.drawRect(lineLeft, canvas.getHeight() - mLineHeight, lineRight, canvas.getHeight(),
                mLinePaint);*/
        int lengh = mNumPages * 20 + (mNumPages - 1) * 30;
        int x = (getMeasuredWidth() - lengh) / 2;
        for (int i = 0; i < mNumPages; i++) {
            if (mActivePage == i) {
                mDotPaint.setColor(Color.WHITE);
            } else {
                mDotPaint.setColor(Color.GRAY);
            }
            canvas.drawCircle(x, getMeasuredHeight() / 2, 10, mDotPaint);
            x += 50;
        }
        /* 修改 end */
    }

记录当前所在页面index:

@Override
    public void setActiveMarker(int activePage) {
        mActivePage = activePage;
    }

大功告成!!!

猜你喜欢

转载自blog.csdn.net/qq_30552095/article/details/80530200