android开发之自定义圆形ImagView

弱龄寄事外,委怀在琴书。这篇文章主要讲述android开发之自定义圆形ImagView相关的知识,希望能为你提供帮助。
在日常使用中我们经常会使用到圆形的图片,但是android系统中并没有默认的圆形控件,所以我们需要自己来写一个自定义的ImagView来显示一张圆形的图片,下面先看效果
【android开发之自定义圆形ImagView】



详细的方法是我们自定义一个类,继承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:src="https://www.songbingjia.com/android/@mipmap/a8"

android:layout_

android:layout_

/>



这样就可以了

    推荐阅读