安卓 Canvas : draw transparent circle on image

标签 android image android-canvas

我正在制作一款像素狩猎游戏。所以我的 Activity 显示了一个 ImageView。我想创建一个提示“告诉我对象在哪里”。为此,我需要模糊整个图像,除了对象所在点周围的圆圈。我可以显示一个半透明的黑色背景,而不是模糊。 在Canvas上画一个半透明的矩形是没有问题的。 但我不知道如何从中裁剪出一个透明的圆圈。 结果应如下所示: enter image description here

请帮助我在 Android SDK 上实现相同的结果。

最佳答案

所以最后我设法做到了这一点。

首先,我在整个 View 上绘制了一个半透明的黑色矩形。 之后使用 PorterDuff.Mode.CLEAR 我剪了一个透明圆圈来显示猫的位置。

我在使用 PorterDuff.Mode.CLEAR 时遇到问题:首先我得到的是黑色圆圈而不是透明圆圈。

在此感谢 Romain Guy 的评论:comment here我知道我的窗口是不透明的,我应该在另一个位图上绘制。并且仅在 View 的 Canvas 上绘制之后。

这是我的onDraw 方法:

private Canvas temp;
private Paint paint;
private Paint p = new Paint();
private Paint transparentPaint;

private void init(){
    Bitmap bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
    temp = new Canvas(bitmap);
    paint = new Paint();
    paint.setColor(0xcc000000);
    transparentPaint = new Paint();
    transparentPaint.setColor(getResources().getColor(android.R.color.transparent));
    transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}

protected void onDraw(Canvas canvas) {
    temp.drawRect(0, 0, temp.getWidth(), temp.getHeight(), paint);
    temp.drawCircle(catPosition.x + radius / 2, catPosition.y + radius / 2, radius, transparentPaint);
    canvas.drawBitmap(bitmap, 0, 0, p);
}

关于安卓 Canvas : draw transparent circle on image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943923/

相关文章:

android - 使用 Retrofit 获得通用 URL 的任何方式

android - 如何以编程方式覆盖 "Google Voice Search"而不是 "Samsung powered by Vlingo"?

c# - 一次在十个图片框上显示多张图片

html - IE10中的图像插值

html - Bootstrap : a button inside a jumbotron with a responsive image

android - Android 中如何验证两个签名或抽奖是否相似?

android: 控制弹窗的叠加顺序

c# - 将Unity Admob标语放置在具有显示切口的设备的底部

android - 如何在底部的图像位图上放置文本?

Android FingerPaint 使用 Canvas 的示例,什么是屏外 Canvas?