刚开始制作前以为很容易,以为对draw()有一点了解,只是重写一下就会实现。不过现实是,搞了两三天,才写出来的。
不过也并不是没有收获。对Bitmap对象到是了解的更深了。还有对图片相交模式也是初次相识。以后要仔细对相交模式研究下,确实是强大功能。
参考技术博客
图片相交模式讲解
参考
效果图:
以下是实现代码,考虑可以使用到系统ImageView定义的方法和属性,选择直接继承ImageView。
当然,需要整成控件宽度高度可能还要做较复杂的判断。这边只记录了最核心的实现原理。
public class RoundImageView extends ImageView {
@Override
protected void onDraw(Canvas canvas) {
int width = getWidth();
int height = getHeight();
Bitmap bitMap = ((BitmapDrawable) getDrawable()).getBitmap();
Bitmap srcBitmap = Bitmap.createScaledBitmap(bitMap, width, height, true);
Bitmap shapeBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas shapeCanvas = new Canvas(shapeBitmap);
shapeCanvas.drawCircle(width / 2, height / 2, width / 2, new Paint());
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
shapeCanvas.drawBitmap(srcBitmap, 0, 0, paint);
canvas.drawBitmap(shapeBitmap, 0, 0, new Paint());
}
}
代码中基本都做了注释,还是比较详细的,个人觉得应该最简单的代码量的。如果上面原理懂了话,其他任何图形应该都不是难事。
尊重作者,转载请注明出处!
版权申明:本文版权归作者所有,未经授权,任何单位或个人不得以任何形式转载、摘编或利用其它方式使用本博客内容。作者保留追究相关法律责任的权利。如需使用博客内容,请与作者联系获得授权。感谢对本文的尊重与支持。
免责声明:本网站所载内容仅供参考,不构成任何专业建议。用户基于本网站内容作出的决策,风险自担。对于因使用本网站内容而产生的任何直接或间接损失,本网站不承担任何责任。请用户审慎判断,理性使用。