自定义Drawble
2016-10-23 11:47
204 查看
简单的自定义Drawable
圆角矩形Drawable:
圆形Drawable:
通过以上简单例子可以定义出其他形状的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~
相关文章推荐
- 如何自定义更改bitmap 或者drawble的宽和高
- 自定义Drawble-Xml
- 蛙蛙推荐:ASP实现自定义标签模板
- [转]C# winForm 自定义鼠标样式的两种方法
- 总结:发送自定义消息
- android 自定义menu及 Error parsing XML: no element found问题解答
- [AX]AX2012 Number sequence framework :(二)实现自定义模块的Number sequence
- 第一个自定义标签
- Android ListView listSelector 自定义
- 【问题收集·中级】关于指示器自定义图片与UUID
- 开发自定义组件
- @EView@EViewGroup增强的自定义视图
- 第 3 章 自定义数据库表结构
- HTML5自定义属性对象dataset
- 为Android Studio编写自定义Gradle插件的教程
- Android自定义实现开关按钮代码
- iOS极光推送(接收后台消息和自定义消息)
- Android 自定义进度条
- Android自定义WheelView
- Android 自定义ListView——下拉刷新&上拉加载