簡單的方式實現右上角數字指示器

簡單的方式實現右上角數字指示器

Screenshot_2017-09-21-10-20-15-604_com.kxjsj.indi.png

實現方式:

重寫View或者viewGroup的onDrawForeground

ViewGroup可能需要setWillNotDraw(false);

畫圓形背景,畫數字ok

github 地址

本文以Imageview為例子


   @Override
    public void onDrawForeground(Canvas canvas) {
        super.onDrawForeground(canvas);
        /**
         * 等于0不畫
         */
        if (indicate == 0) {
            return;
        }
        if (paint == null) {
            paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        }
        paint.setColor(indicateColor);
        int width = getWidth();
        /**
         * 大于最大值畫一個圓
         */
        if(indicate>max){
            canvas.drawCircle(width-indicateRadius,indicateRadius,indicateRadius/2,paint);
            return;
        }
        /**
         * 右上角
         * draw背景
         */

        float v = paint.measureText(indicate + "");
        rect.set(width - v - indicateRadius * 2, 0, width, indicateRadius * 2);
        canvas.drawRoundRect(rect, indicateRadius, indicateRadius, paint);
        /**
         * 畫數字
         */
        paint.setColor(indicateTextColor);
        paint.setTextSize(indicatesize);
        /**
         * 計算基線位置
         */
        Paint.FontMetrics fm = paint.getFontMetrics();
        float baseLineY = indicateRadius - (fm.ascent - (fm.ascent - fm.descent) / 2);
        paint.getTextBounds(indicate+"",0,(indicate+"").length(),bounds);
        canvas.drawText(indicate + "",width - bounds.right/2 - (indicateRadius+v/2), baseLineY, paint);

    }


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容