Android custom ImageView with rounded corners

Recently, there is a requirement to implement an ImageView with rounded corners. I found three parties on the Internet. Although the demo is correct, it is not possible to transplant it, because the bitmap in xutils is used for parsing when requesting links, so the error of type conversion exception will always be reported.

In this way, you can only define one by yourself

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,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,b.getWidth(),b.getHeight());
      final Rect rectDest = new Rect(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,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,bitmap.getWidth(),bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    paint.setAntiAlias(true);
    canvas.drawARGB(0,0);
    paint.setColor(color);
    int x = bitmap.getWidth();

    canvas.drawRoundRect(rectF,roundPx,paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap,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>

The final renderings will not send photos. If you try, you can see the renderings.

The above is the whole content of this article. I hope it will help you in your study, and I hope you will support us a lot.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>