我最近一直在玩类似的东西,并为你量身定做.
所有的魔力都发生在onDraw上:
public class FocusView extends View {
private Paint mTransparentPaint;
private Paint mSemiBlackPaint;
private Path mPath = new Path();
public FocusView(Context context) {
super(context);
initPaints();
}
public FocusView(Context context, AttributeSet attrs) {
super(context, attrs);
initPaints();
}
public FocusView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaints();
}
private void initPaints() {
mTransparentPaint = new Paint();
mTransparentPaint.setColor(Color.TRANSPARENT);
mTransparentPaint.setStrokeWidth(10);
mSemiBlackPaint = new Paint();
mSemiBlackPaint.setColor(Color.TRANSPARENT);
mSemiBlackPaint.setStrokeWidth(10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPath.reset();
mPath.addCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, 550, Path.Direction.CW);
mPath.setFillType(Path.FillType.INVERSE_EVEN_ODD);
canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight() / 2, 550, mTransparentPaint);
canvas.drawPath(mPath, mSemiBlackPaint);
canvas.clipPath(mPath);
canvas.drawColor(Color.parseColor("#A6000000"));
}
}
这里的技巧是创建一个Path(透明圆),以便我们可以将路径的绘制方法设置为“路径之外”而不是“路径内部”.最后,我们可以简单地将画布剪切到该路径,并填充黑色.
对于您来说,您只需要将Color.BLACK更改为您的颜色,以及更改所需的半径.
编辑:
哦,只需以编程方式添加它:
FocusView视图=新的FocusView(上下文)
your_layout.addView(视图)
或者通过XML:
android:layout_width="match_parent"
android:layout_height="match_parent" />