rainbow-android-app

自定义View

虽然安卓提供了丰富的控件,但是开发过程中经常遇到需要开发自定义的控件的情况,例如消息样式中的发送图片,使用原ImageView是无法实现下图效果的(在圆角边框+箭头的基础上对图片进行裁剪):

实现方法

本例实在原ImageView基础上进行修改,因此相对较简单,只需要重写onDraw(Canvas)即可。

  1. 获取bitmap

    • 使用getDrawable()方法获取到ImageView得Drawable,并由其创建Bitmap;
    • 使用getWidth()getHeight()方法获取ImageView的宽高。
    • 根据ImageView宽高对Bitmap进行缩放、裁剪,取图片中央部分。
  2. 绘制边框

    • 绘制边框的原理是 Paint设置PorterDuff.Mode.SRC_IN模式时会保留原图与所画图重叠的部分,因此我们只要使用Paint画好边框剩下的就很简单了。
    • 使用Path的moveTo(float,float)lineTo(float,float)arcTo(float,float) 并计算好对应的数值(圆弧度线、直线长度),设置好所要绘制的“路径”。
    • canvas.drawPath(path, paint)绘制边框。
  3. 绘制新的Bitmap

    • 设置好模式 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN))
    • 绘制 canvas.drawBitmap(scaledBitmap, 0, 0, paint)

以上就实现了示例图片的效果~