为了账号安全,请及时绑定邮箱和手机立即绑定

android开发之自定义圆形ImagView

标签:
Android

在日常使用中我们经常会使用到圆形的图片,但是android系统中并没有默认的圆形控件,所以我们需要自己来写一个自定义的ImagView来显示一张圆形的图片,下面先看效果

5bb6e054000189ba04050721.jpg

详细的方法是我们自定义一个类,继承ImagView,然后重写一些方法,下面是代码

/**
 * 圆形的ImagView
 * 
 * @author Administrator
 * 
 */
public class RoundImageView extends ImageView {
   public RoundImageView(Context context) {
      super(context);
      // TODO Auto-generated constructor stub
   }

   public RoundImageView(Context context, AttributeSet attrs) {
      super(context, attrs);
   }

   public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
   }

   @Override
   protected void onDraw(Canvas canvas) {

      Drawable drawable = getDrawable();

      if (drawable == null) {
         return;
      }

      if (getWidth() == 0 || getHeight() == 0) {
         return;
      }

      Bitmap b = ((BitmapDrawable) drawable).getBitmap();

      if (null == b) {
         return;
      }

      Bitmap bitmap = b.copy(Config.ARGB_8888, true);

      int w = getWidth(), h = getHeight();

      Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
      canvas.drawBitmap(roundBitmap, 0, 0, null);

   }

   public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
      Bitmap sbmp;
      if (bmp.getWidth() != radius || bmp.getHeight() != radius)
         sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
      else
         sbmp = bmp;
      Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(),
            Config.ARGB_8888);
      Canvas canvas = new Canvas(output);

      final int color = 0xffa19774;
      final Paint paint = new Paint();
      final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());

      paint.setAntiAlias(true);
      paint.setFilterBitmap(true);
      paint.setDither(true);
      canvas.drawARGB(0, 0, 0, 0);
      //设置笔的颜色
      paint.setColor(Color.parseColor("#BAB399"));
      //画圆
      canvas.drawCircle(sbmp.getWidth() / 2 + 0.5f,
            sbmp.getHeight() / 2 + 0.5f, sbmp.getWidth() / 2 + 0.5f, paint);
      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
      canvas.drawBitmap(sbmp, rect, rect, paint);

      return output;
   }
}

然后在布局中引用这个自定义的控件, 就可以了

<里面的是你的包名加自定义的类名,如果按住Ctrl+鼠标左键能进入类的话,就说明引用成功了。

<comiptv.example.vincent.test.RoundImageView
    android:layout_centerInParent="true"
    android:class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="@mipmap/a8"
    android:layout_width="300dp"
    android:layout_height="300dp"
    />

这样就可以了

原文链接:http://www.apkbus.com/blog-843025-61687.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消