自定义Drawable实现圆角图片和圆形图片

浅浅的花香味﹌ 2022-08-21 07:49 288阅读 0赞

转载请注明原博客地址:http://write.blog.csdn.net/postedit/51226071

例子源码下载地址: https://github.com/gdutxiaoxu/CustomDrawable

1 自定义圆角图片

a 继承drawable,重写里面的几个方法

b 通过构造方法传入Bitmap对象,初始化一个BitmapShader,将其传递给我们的画笔

  1. public RoundImageDrawable(Bitmap bitmap) {
  2. mBitmap = bitmap;
  3. BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP,
  4. TileMode.CLAMP);
  5. mPaint = new Paint();
  6. mPaint.setAntiAlias(true);
  7. mPaint.setShader(bitmapShader);
  8. }

c 在setBounds()初始化一个 ReactF

  1. @Override
  2. public void setBounds(int left, int top, int right, int bottom) {
  3. super.setBounds(left, top, right, bottom);
  4. rectF = new RectF(left, top, right, bottom);
  5. }

d 在draw()方法里面调用

canvas.draw()传入我们的矩形对象和画笔

  1. canvas.drawRoundRect(rectF, 30, 30, mPaint);

效果图如下

Center

源码如下:

  1. package com.xujun.administrator.customdrawable.view;
  2. import android.graphics.Bitmap;
  3. import android.graphics.BitmapShader;
  4. import android.graphics.Canvas;
  5. import android.graphics.ColorFilter;
  6. import android.graphics.Paint;
  7. import android.graphics.PixelFormat;
  8. import android.graphics.RectF;
  9. import android.graphics.Shader.TileMode;
  10. import android.graphics.drawable.Drawable;
  11. public class RoundImageDrawable extends Drawable {
  12. private Paint mPaint;
  13. private Bitmap mBitmap;
  14. private RectF rectF;
  15. public RoundImageDrawable(Bitmap bitmap) {
  16. mBitmap = bitmap;
  17. BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP,
  18. TileMode.CLAMP);
  19. mPaint = new Paint();
  20. mPaint.setAntiAlias(true);
  21. mPaint.setShader(bitmapShader);
  22. }
  23. @Override
  24. public void setBounds(int left, int top, int right, int bottom) {
  25. super.setBounds(left, top, right, bottom);
  26. rectF = new RectF(left, top, right, bottom);
  27. }
  28. @Override
  29. public void draw(Canvas canvas) {
  30. //圆角的 半斤可以通过参数传递进来,这里写死了
  31. canvas.drawRoundRect(rectF, 30, 30, mPaint);
  32. }
  33. @Override
  34. public int getIntrinsicWidth() {
  35. return mBitmap.getWidth();
  36. }
  37. @Override
  38. public int getIntrinsicHeight() {
  39. return mBitmap.getHeight();
  40. }
  41. @Override
  42. public void setAlpha(int alpha) {
  43. mPaint.setAlpha(alpha);
  44. }
  45. @Override
  46. public void setColorFilter(ColorFilter cf) {
  47. mPaint.setColorFilter(cf);
  48. }
  49. @Override
  50. public int getOpacity() {
  51. return PixelFormat.TRANSLUCENT;
  52. }
  53. }
  54. ** ** **2 自定义圆形图片**

a 继承drawable,重写里面的几个方法

b 通过构造方法传入Bitmap对象,初始化一个BitmapShader,将其传递给我们的画笔

  1. public CircleImageDrawable(Bitmap bitmap) {
  2. mBitmap = bitmap;
  3. BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP,
  4. TileMode.CLAMP);
  5. mPaint = new Paint();
  6. mPaint.setAntiAlias(true);
  7. mPaint.setShader(bitmapShader);
  8. // 选择我们的半径为较小的那个
  9. mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight());
  10. }

c 在Draw()方法里面调用

canvas.draw()传入我们的矩形对象和画笔

  1. canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint);

效果图如下

Center

例子源码下载地址:

https://github.com/gdutxiaoxu/CustomDrawable

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读