java代码:
设置相关变量:
private Bitmap bitmap;
private Paint mPaint;
private Path mPath;
因为需要使用clip系列函数,要禁用硬件加速功能,否则将不会产生任何的效果。
setLayerType(LAYER_TYPE_SOFTWARE,null);
不能在onDraw函数中创建变量,需要先初始化。
private void init() {
setLayerType(LAYER_TYPE_SOFTWARE,null);
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.a);
mPaint = new Paint();
mPath = new Path();
int width = bitmap.getWidth();
int height = bitmap.getHeight();
mPath.addCircle(width/2,height/2,width/2,Path.Direction.CCW);
}
重写onDraw()函数:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.clipPath(mPath);
canvas.drawBitmap(bitmap,0,0,mPaint);
canvas.restore();
}
最后需要在xml布局文件中引入即可:
<com.example.vacationtest.CircleTest
android:layout_width="120dp"
android:layout_height="120dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
运行效果如下:
原始图像(可自行百度搜图)