首页 > 系统 > Android > 正文

Android自定义带圆角的ImageView

2019-12-12 00:07:20
字体:
来源:转载
供稿:网友

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表