自定义Drawble

来源:互联网 发布:mac无u盘安装win7 编辑:程序博客网 时间:2024/05/29 18:14

简单的自定义Drawable

圆角矩形Drawable:

public class RoundRectImageDrawable extends Drawable {    private Paint mPaint;    private Bitmap mBitmap;    //绘制区域    private RectF rectF;    //圆角半径    private float rx = 30;    private float ry = 30;    public RoundRectImageDrawable(Bitmap bitmap) {        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        mPaint = new Paint();        mPaint.setAntiAlias(true);        mPaint.setShader(bitmapShader);        rectF = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());        mBitmap = bitmap;    }    /**     * 绘制其边界(通过setBounds设置)尊重可选的效果作为alpha(通过setAlpha设置)和颜色过滤器(通过setColorFilter设置)。     *     * @param canvas     */    @Override    public void draw(Canvas canvas) {        canvas.drawRoundRect(rectF, rx, ry, mPaint);    }    /**     * 为Drawable指定一个边界矩形。 这是drawable的地方将在draw()方法被调用时绘制。     *     * @param left     * @param top     * @param right     * @param bottom     */    @Override    public void setBounds(int left, int top, int right, int bottom) {        super.setBounds(left, top, right, bottom);        rectF.set(left, top, right, bottom);    }    @Override    public int getIntrinsicWidth() {        return mBitmap.getWidth();    }    @Override    public int getIntrinsicHeight() {        return mBitmap.getHeight();    }    @Override    public void setAlpha(int alpha) {        mPaint.setAlpha(alpha);    }    @Override    public void setColorFilter(ColorFilter colorFilter) {        mPaint.setColorFilter(colorFilter);    }    @Override    public int getOpacity() {        return PixelFormat.TRANSLUCENT;    }}



圆形Drawable:


public class CircleImageDrawable extends Drawable {    private Paint mPaint;    private Bitmap mBitmap;    private RectF rectF;    private int R;    public CircleImageDrawable(Bitmap bitmap) {        BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);        mPaint = new Paint();        mPaint.setAntiAlias(true);        mPaint.setShader(bitmapShader);        rectF = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());        mBitmap = bitmap;        R = Math.min(bitmap.getWidth(), bitmap.getHeight());    }    @Override    public void draw(Canvas canvas) {//        canvas.drawRoundRect(rectF, 30, 30, mPaint);        canvas.drawCircle((rectF.right + rectF.left) / 2, (rectF.top + rectF.bottom) / 2, R / 2, mPaint);    }    @Override    public void setBounds(int left, int top, int right, int bottom) {        super.setBounds(left, top, right, bottom);        rectF.set(left, top, right, bottom);        R = Math.min(right - left, bottom - top);    }    @Override    public int getIntrinsicWidth() {        return mBitmap.getWidth();    }    @Override    public int getIntrinsicHeight() {        return mBitmap.getHeight();    }    @Override    public void setAlpha(int alpha) {        mPaint.setAlpha(alpha);    }    @Override    public void setColorFilter(ColorFilter colorFilter) {        mPaint.setColorFilter(colorFilter);    }    @Override    public int getOpacity() {        return PixelFormat.TRANSLUCENT;    }}

通过以上简单例子可以定义出其他形状的Drawable~



0 0