【发布时间】:2017-11-24 09:55:54
【问题描述】:
我想做一个圆形的表面视图(舷窗效果)。表面视图位于框架布局内。我想制作一个自定义视图,我可以将其添加到表面视图顶部的框架布局中,并掩盖整个框架布局以产生舷窗效果,以便表面视图将显示为圆形。
我在 Web 和 Stackoverflow 上搜索了很多答案,但都失败了。 然后我看到this 的问题,我尝试使用这个自定义视图来屏蔽框架布局(以及因此的表面视图),但我没有得到想要的结果。
我想要的是一个自定义视图,它可以获取它的父级的高度和宽度(父级是方形的)并在它的中心制作一个透明的圆圈,接触边界中间的所有四个边,休息(视图 - 圆圈)视图的颜色将是我可以设置的。
public class FocusView extends View {
private Paint mTransparentPaint;
private Paint mSemiBlackPaint;
private Path mPath = new Path();
public static float radius , xCor , yCor;
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.GREEN);
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(xCor,yCor,radius, Path.Direction.CW);
mPath.setFillType(Path.FillType.INVERSE_EVEN_ODD);
canvas.drawCircle(xCor,yCor,radius, mTransparentPaint);
canvas.drawPath(mPath, mSemiBlackPaint);
canvas.clipPath(mPath);
canvas.drawColor(Color.parseColor("#FFFFFF")); //A6000000
}
}
如果有人可以帮助我,请。提前致谢。
【问题讨论】:
-
这对您有帮助吗?请记住,这都是 xml 没有 java stackoverflow.com/questions/46972667/…
标签: android android-custom-view surfaceview android-framelayout