吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1108|回复: 0
收起左侧

[其他转载] 自定义Drawable实现圆角/圆形图片

  [复制链接]
dadashuai 发表于 2021-7-28 13:45

圆形图片Drawable

public class CircleDrawable extends Drawable {
    private Paint mPaint;
    private int mWidth; //宽/高,直径
    private Bitmap mBitmap;

    public CircleDrawable(Bitmap bitmap) {
        this.mBitmap = bitmap;
        BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//着色器 水平和竖直都需要填充满
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(bitmapShader);
        mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); //宽高的最小值作为直径
    }

    @Override
    public void draw( Canvas canvas) {
        canvas.drawCircle(mWidth/2, mWidth/2, mWidth/2, mPaint); //绘制圆形
    }

    @Override
    public void setAlpha(int i) {
        mPaint.setAlpha(i);
    }

    @Override
    public void setColorFilter( ColorFilter colorFilter) {
        mPaint.setColorFilter(colorFilter);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT; //设置系统默认,让drawable支持和窗口一样的透明度
    }

    //还需要从重写以下2个方法,返回drawable实际宽高
    @Override
    public int getIntrinsicWidth() {
        return mWidth;
    }

    @Override
    public int getIntrinsicHeight() {
        return mWidth;
    }

}

圆角图片Drawable


public class RoundCornerDrawable extends Drawable {
    private Paint mPaint;
    private RectF rectF;//定义矩形区域
    private Bitmap mBitmap;

    public RoundCornerDrawable(Bitmap bitmap) {
        this.mBitmap = bitmap;
        BitmapShader bitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//着色器 水平和竖直都需要填充满
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(bitmapShader);
        //rectF = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
    }

    @Override
    public void draw(Canvas canvas) {
        //RectF:圆角矩形区域
        canvas.drawRoundRect(new RectF(0, 0, mBitmap.getWidth(), mBitmap.getHeight()),100, 100, mPaint);//rx:x方向上的圆角半径; ry:y方向上的圆角半径。
    }

    /*    @Override
     public void setBounds(int left, int top, int right, int bottom) {
     super.setBounds(left, top, right, bottom);
     rectF = new RectF(left, top, right, bottom);
     }*/

    @Override
    public void setAlpha(/*@IntRange(from = 0, to = 255) */int i) {
        mPaint.setAlpha(i);
    }

    @Override
    public void setColorFilter( ColorFilter colorFilter) {
        mPaint.setColorFilter(colorFilter);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT; //设置系统默认,让drawable支持和窗口一样的透明度
    }

    //还需要从重写以下2个方法,返回drawable实际宽高
    @Override
    public int getIntrinsicWidth() {
        return mBitmap.getWidth();
    }

    @Override
    public int getIntrinsicHeight() {
        return mBitmap.getHeight();
    }

}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-7 22:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表