Nax*_*cif 0 graphics user-interface android erase android-canvas
我正在试图弄清楚如何在ImageView中"切出一个羽毛孔".
原因是,我正在创建一个教程,我希望整个屏幕变暗.通过放置一个alpha值约为50%的黑色图像,这很容易做到.接下来我想在那个叠加层上切一个洞,这样你就可以更清楚地看到它下面的东西了.我们的目标是突出显示用户点击的按钮和内容,以便他们学习如何操作.
当我之前在ActionScript/Flash中执行此操作时,很容易在屏幕上放置一个暗淡的alpha,然后创建一个圆圈,缩放它的X和Y以匹配我想要突出显示的对象,然后使用它添加一个过滤器它的混合模式设置为SUBTRACT.这个减去圆/椭圆也可以被告知接受鼠标点击,并且这个孔很好用.
在android中,我似乎无法看到如何从视图中减去.我可以看到人们使用滤色器添加到视图或更改颜色.
所以,除非我错过了船,你怎么减去?
您需要编写自定义Drawable类并将其分配给ImageView.那么你可以在draw方法中轻松完成这样的操作:
class MyDrawable extends Drawable {
@Override
public void draw(Canvas canvas) {
Path path = new Path();
path.setFillType(FillType.EVEN_ODD);
// This will create a full screen rectangle.
path.addRect(<screen size rect here>, Path.Direction.CW);
// This will punch a hole in it
path.addCircle(<x>, <y>, <radius>, Path.Direction.CCW);
// Now draw everything on the Canvas
Paint paint = new Paint();
paint.setColor(<dim color here>);
canvas.drawPath(path, paint);
}
Run Code Online (Sandbox Code Playgroud)
为了使它在突出显示时工作得很好,你可以在这个Drawable的构造函数中传递你想要突出显示的视图.然后,您可以使用以下方法确定视图的位置:
int[] position = new int[2];
view.getLocationOnScreen(position);
Run Code Online (Sandbox Code Playgroud)
使用此选项以及视图的高度和宽度来确定圆的大小和位置.
我不知道这是否有效,但您也可以尝试通过这样做来完成切割:
paint.setMaskFilter(new BlurMaskFilter(20, BlurMaskFilter.Blur.NORMAL));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |