当前位置: 代码迷 >> Android >> 怎么用paint实现两个控件的覆盖,遮挡先画的控件的一部分
  详细解决方案

怎么用paint实现两个控件的覆盖,遮挡先画的控件的一部分

热度:100   发布时间:2016-04-28 02:07:07.0
如何用paint实现两个控件的覆盖,遮挡先画的控件的一部分
我先画了一个圆,圆心为100,100,半径为20,完后我画了一条线,从圆心到200,200,我现在想实现圆和线相交的部分只显示圆,就是在圆内的线要求不可见


outGrayPaint.setColor(Color.GRAY);
outGrayPaint.setAntiAlias(true);
outGrayPaint.setStyle(Paint.Style.STROKE);

canvas.drawCircle(100, 100, 20, outGrayPaint);
canvas.drawLine(100, 100, 200, 200, outGrayPaint);



但现在是相交的,请问该如何实现我想要的效果,我查到有一个PorterDuffXfermode,但是尝试后没用,不知道是不是因为这个只支持drawBitmap,当然也可以把outGrayPaint的Style设为Fill,完后因为填充色和线的颜色一样而导致线在圆内部分不可见,但我不要这种效果,outGrayPaint的Style是STROKE的
------解决思路----------------------
你把线放在圆下面就好了。或者把线段分成两段来画,根据线段的角度和圆的半径算出与圆相交的2点。再画线
------解决思路----------------------
转bitmap用setXfermode……

canvas画个和背景色同色的小1、2像素同心圆?适用性不太好
然后就是计算了……不过灵活性也不好
------解决思路----------------------
这个要计算的,如果简单的想看你代码的效果就直接
canvas.drawLine(100 + 0.707 * 20 , 100 + 0.707 * 20, 200, 200, outGrayPaint);
0.707是二分之一根号二,最直接的意思是说从圆上开始画,具体点是cos角度乘以半径为x,sin角度乘以半径为y,从圆心到圆上的坐标就可以表示为:x = 圆心x + (cos角度 * 半径), y = 圆心y + (sin角度 * 半径)

另外具体的角度不用计算出来,只要计算cos和sin的值就可以。
  相关解决方案