您的位置:首页 > 其它

自定义Drawble

2016-10-23 11:47 204 查看
简单的自定义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~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息