Android自定义带圆角的ImageView

作者:u010196821 时间:2022-12-12 23:48:07 

最近有一个实现一个带有圆角的ImageView的需求,在网上找了找三方,虽然Demo都是正确的,但是移植过来就不可以了,因为请求链接的时候用的是xUtils中Bitmap来进行解析的,这样就总是会报类型转换异常的错误。

就这样只能自己定义一个了.

Demo:


package com.yizooo.yizooo.ui;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

import com.lidroid.xutils.bitmap.core.AsyncDrawable;

/**
* Created by 雪宝宝 on 2016/3/27.
* 自定义圆角工具
*/
public class RoundImageView extends ImageView {
 private Paint paint;

public RoundImageView(Context context) {
   this(context,null);
 }

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

public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
   paint = new Paint();
 }

/**
  * 绘制圆角矩形图片
  */
 @Override
 protected void onDraw(Canvas canvas) {
   Drawable drawable = getDrawable();
   Bitmap bitmap = null;
   if (null != drawable && drawable instanceof BitmapDrawable ) {
     BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
      bitmap = bitmapDrawable.getBitmap();
     //Bitmap bitmap =( (BitmapDrawable)drawable).getBitmap();
     Bitmap b = getRoundBitmap(bitmap, 10);
     final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());
     final Rect rectDest = new Rect(0,0,getWidth(),getHeight());
     paint.reset();
     canvas.drawBitmap(b, rectSrc, rectDest, paint);

}//防止出现类型转换异常
   else if(this.getDrawable() instanceof AsyncDrawable){
     bitmap = Bitmap
         .createBitmap(
             getWidth(),
             getHeight(),
             drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                 : Bitmap.Config.RGB_565);
     Canvas canvas1 = new Canvas(bitmap);
     // canvas.setBitmap(bitmap);
     drawable.setBounds(0, 0, getWidth(),
         getHeight());
     drawable.draw(canvas1);
   }
   else {
     super.onDraw(canvas);
   }
 }

/**
  * 获取圆角矩形图片方法
  * @param bitmap
  * @param roundPx,一般设置成14
  * @return Bitmap
  * @author caizhiming
  */
 private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) {
   Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
       bitmap.getHeight(), Config.ARGB_8888);
   Canvas canvas = new Canvas(output);

final int color = 0xff424242;

final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
   final RectF rectF = new RectF(rect);
   paint.setAntiAlias(true);
   canvas.drawARGB(0, 0, 0, 0);
   paint.setColor(color);
   int x = bitmap.getWidth();

canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
   paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
   canvas.drawBitmap(bitmap, rect, rect, paint);
   return output;

}
}

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/swipelayout"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content" >

<com.yizooo.yizooo.ui.RoundImageView
     android:id="@+id/item_frag_news_icon"
     android:layout_width="@dimen/dp_47"
     android:layout_height="@dimen/dp_50"
     android:scaleType="fitXY"
     android:src="@mipmap/fuwutongzhi"
     android:layout_margin="@dimen/dp_10"
     />
</RelativeLayout>

最终的效果图就不发照片了,各位朋友尝试一下就可以看出效果图了。

来源:https://blog.csdn.net/u010196821/article/details/51003330

标签:Android,圆角,ImageView
0
投稿

猜你喜欢

  • C#中的IEnumerable简介及简单实现实例

    2023-07-15 22:27:07
  • Java的封装类和装箱拆箱详解

    2023-09-20 22:41:22
  • IntelliJ IDEA中properties文件显示乱码问题的解决办法

    2021-09-08 04:59:03
  • spring boot整合redis主从sentinel方式

    2021-10-01 20:13:47
  • Java数据结构之线性表

    2022-08-21 06:32:28
  • SpringCloud URL重定向及转发代码实例

    2023-11-19 11:43:18
  • Android仿百度福袋红包界面

    2023-11-01 04:53:01
  • Android异步方法以同步方式实现

    2022-11-05 15:13:50
  • 图解JVM垃圾内存回收算法

    2023-10-13 17:24:35
  • Linux下用java -jar运行可执行jar包的方法教程

    2022-11-24 18:01:46
  • Android 蓝牙BLE开发完全指南

    2023-07-03 03:15:06
  • 关于HashMap相同key累加value的问题

    2022-02-13 13:32:18
  • Adapter模式实战之重构鸿洋集团的Android圆形菜单建行

    2021-11-02 09:42:32
  • 基于Ok+Rxjava+retrofit实现断点续传下载

    2021-08-27 02:21:49
  • Java多线程之多种锁和阻塞队列

    2023-09-26 10:31:55
  • 基于Jasypt对SpringBoot配置文件加密

    2023-07-13 20:13:03
  • 聊聊Unity 自定义日志保存的问题

    2021-11-28 15:38:55
  • 解决Maven中关于依赖导入不进的问题

    2023-09-05 23:13:08
  • 推荐史上最全的IDEA好用插件

    2023-02-22 21:35:04
  • Spring Boot调用 Shell 脚本实现看门狗功能

    2023-09-14 18:52:07
  • asp之家 软件编程 m.aspxhome.com