先上效果图:

Android仿QQ圆形头像_第1张图片


实现思路:

        自定义一个View,继承ImageView,通过PorterDuffXfermode实现一个Mask效果,并在onDraw中画出来。

自定义View的代码:

public class CircleClipView extends ImageView{    private Paint backgroundPaint = null;    private Paint maskPaint = null;        private int backgroundColor = -1;    public CircleClipView(Context context) {// TODO Auto-generated constructor stubsuper(context);init();}public CircleClipView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubTypedArray a = context.obtainStyledAttributes(attrs,R.styleable.circleview);backgroundColor = a.getColor(R.styleable.circleview_backgroundcolor, Color.WHITE);a.recycle();init();}private void init(){maskPaint = new Paint();PorterDuffXfermode porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);maskPaint.setXfermode(porterDuffXfermode);maskPaint.setColor(Color.TRANSPARENT);maskPaint.setAntiAlias(true);backgroundPaint = new Paint();backgroundPaint.setColor(backgroundColor);backgroundPaint.setAntiAlias(true);  }private Bitmap getMask(){Bitmap b = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);  Canvas canvas = new Canvas(b);RectF rectF = new RectF(0, 0, getWidth(), getHeight());canvas.drawRect(rectF, backgroundPaint);canvas.drawOval(rectF, maskPaint);return b;}private Bitmap scaleDrawable(Drawable drawable){Bitmap b = ((BitmapDrawable) drawable).getBitmap();Matrix matrix = new Matrix();float scaleWidth = ((float) getWidth()) / b.getWidth();            float scaleHeight = ((float) getHeight()) / b.getHeight();   matrix.postScale(scaleWidth, scaleHeight);Bitmap bitmap = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(),matrix, true);return bitmap;}@Overrideprotected void onDraw(Canvas canvas){Bitmap sourceBitmap = scaleDrawable(getDrawable());if(sourceBitmap != null) canvas.drawBitmap(sourceBitmap, 0, 0, null);canvas.drawBitmap(getMask(), 0, 0, null);}}


XML代码
<?xml version="1.0" encoding="utf-8"?>    

更多相关文章

  1. 工具:Android本地代码生成器
  2. Android很有用的代码片段
  3. android上传图片到服务器,求服务器那边和android的Activity的完整
  4. android 源代码研究之----frameworks-----status bar 状态栏
  5. Android 代码实现重启
  6. 【Arcgis android】 离线编辑实现及一些代码段
  7. Android 实现扫雷小游戏实例代码
  8. android代码分析,及Terminal使用
  9. Android应用程序绑定服务(bindService)的过程源代码分析(2)

随机推荐

  1. Android(安卓)Eclipse JNI 调用 .so文件
  2. Android中设置半个屏幕大小且居中的按钮
  3. Android经典面试题大全[陆续完善中......
  4. Android中Service的使用详解和注意点(Loca
  5. Android - 文本框的输入法控制和默认焦点
  6. android的动画相关参数说明
  7. android之view获取getWidth()和getHeight
  8. Android 4.1.2系统添加重启功能
  9. ANdroid之蓝牙
  10. Android Toast 长期显示解决方案