软件编程
位置:首页>> 软件编程>> Android编程>> Android自定义带圆角的ImageView

Android自定义带圆角的ImageView

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

标签:Android,圆角,ImageView

最近有一个实现一个带有圆角的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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com