鍍金池/ 問答/Android/ 如何實現(xiàn)textview右下角角標(biāo)變成圓角呢

如何實現(xiàn)textview右下角角標(biāo)變成圓角呢

private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setColor(strokeColor);
        mPaint.setStrokeWidth(strokeWidth);

        mPaintLabel = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaintLabel.setStyle(Paint.Style.STROKE);

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_support_select);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int width = getWidth();
        int height = getHeight();

        //http://blog.csdn.net/kuaiguixs/article/details/78753149
        float offset = strokeWidth / 2;

        canvas.drawColor(solidColor);
        RectF rec = new RectF(offset, offset, width - offset, height - offset);
        if (isSelect) {

            canvas.drawRoundRect(rec, cornersRadius, cornersRadius, mPaint);

            canvas.drawBitmap(bitmap, getWidth() - labelWidth, getHeight() - labelHeight, mPaintLabel);

        } else {
            canvas.drawRoundRect(rec, cornersRadius, cornersRadius, mPaint);
        }
    }

clipboard.png

回答
編輯回答
孤巷

因為你圖片覆蓋了倒角,唯一能做的就是對圖片也做倒角處理才行,圖片不換就用代碼坐下倒角,但看你這個圖片感覺倒角處理了也沒法用,那個勾太靠下了

2017年11月21日 05:57
編輯回答
涼心人

如果一定不想重新切圖(就是將圖片切成圓角圖片),那么可以考慮采用bitmap轉(zhuǎn)圓角的方案來實現(xiàn)

    public static Bitmap toRoundCorner(Bitmap bitmap, int pixels, boolean lt, boolean rt, boolean lb,
    boolean rb) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        final int color = 0xff424242;
        final Paint paint = new Paint();
        final Paint paint1 = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);
        final float roundPx = pixels;
        paint.setAntiAlias(true);
        paint1.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        paint1.setColor(0xaaaaaaaa);
        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
        if(lt){
        canvas.drawRect(0, 0, bitmap.getWidth()-pixels, bitmap.getHeight()-pixels, paint);
        }
        if(rt){
        canvas.drawRect(pixels, 0, bitmap.getWidth(), bitmap.getHeight()-pixels, paint);
        }
        if(lb){
        canvas.drawRect(0, pixels, bitmap.getWidth()-pixels, bitmap.getHeight(), paint);
        }
        if(rb){
        canvas.drawRect(pixels, pixels, bitmap.getWidth(), bitmap.getHeight(), paint);
        }
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
    return output;
    }

將bitmap自己畫一個圓角即可
網(wǎng)上抄的代碼,沒實測,不過目測應(yīng)該是可以

lt = left top
rt = right Top
lb = left Bottom
rb = right Bottom
2017年6月12日 09:28
編輯回答
久舊酒

換個圖吧 clippath能做到但是有點麻煩

2017年10月24日 07:53
編輯回答
北城荒
private Bitmap roundBitmapByXfermode(Bitmap bitmap, int outWidth, int outHeight, int radius) {
        if(bitmap == null) {
            throw new NullPointerException("Bitmap can't be null");
        }

        // 等比例縮放拉伸
        float widthScale = outWidth * 1.0f / bitmap.getWidth();
        float heightScale = outHeight * 1.0f / bitmap.getHeight();
        Matrix matrix = new Matrix();
        matrix.setScale(widthScale, heightScale);
        Bitmap newBt = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

        // 初始化目標(biāo)bitmap
        Bitmap targetBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(targetBitmap);
        canvas.drawARGB(0, 0, 0, 0);

        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

        // 利用畫筆繪制底部圓角
        canvas.drawRoundRect(new RectF(0, outHeight - 2 * radius, outWidth, outHeight), radius, radius, paint);

        // 利用畫筆繪制左側(cè)矩形
        canvas.drawRect(new RectF(0, 0, radius, outHeight), paint);
        // 利用畫筆繪制頂部上面直角部分
        canvas.drawRect(new RectF(0, 0, outWidth, outHeight - radius), paint);
        // 設(shè)置疊加模式
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

        // 在畫布上繪制原圖片
        Rect ret = new Rect(0, 0, outWidth, outHeight);
        canvas.drawBitmap(newBt, ret, ret, paint);


        bitmap.recycle();
        newBt.recycle();

        return targetBitmap;
    }

謝謝大家的回答我也寫了一個方法,目前已經(jīng)實現(xiàn)效果,

clipboard.png

當(dāng) isSelect = false, 圓角矩形 沒有顯示出來效果,大家知道原因嗎

2018年7月28日 19:21