白色圆圈内的位图
Bitmap inside white circle
我正在尝试在白色圆圈内填充 Bitmap
,更具体地说:
我有一个 Bitmap
例如这个:
我想要这个:
为了理解图像,我将背景设为灰色。
我用了这个方法,但是没有达到我想要的效果..
public static Bitmap getRoundedBitmap(Bitmap bitmap)
{
final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(output);
final int color = Color.WHITE;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawOval(rectF, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
bitmap.recycle();
return output;
}
我猜您用来绘制椭圆的颜色的 ALPHA = 0。请尝试将 Color.WHITE 替换为 Color(1.0f, 1.0f, 1.0f, 1.0f)。告诉我这是否解决了您的问题,然后查看:
What does PorterDuff.Mode mean in android graphics.What does it do?
在这种情况下,对于 SRC_IN:[Sa * Da, Sc * Da](取自 android 参考,PorterDuff.Mode)
这是一个使用 XML 中制作的形状的示例。
1) Right-click 在您的可绘制资源文件夹中并创建一个新的可绘制资源文件。
2) 粘贴以下代码。这将创建一个与您想要的背景非常相似的可绘制资源。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size android:width="50dp" android:height="50dp"/>
<solid android:color="@android:color/darker_gray"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<size android:width="50dp" android:height="50dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</layer-list>
3) 在布局中使用资源。用您的 'tick' 资源文件替换我的占位符 Android 复选框。
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/highlight_circle">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@android:drawable/checkbox_on_background"/>
</RelativeLayout>
我正在尝试在白色圆圈内填充 Bitmap
,更具体地说:
我有一个 Bitmap
例如这个:
我想要这个:
为了理解图像,我将背景设为灰色。
我用了这个方法,但是没有达到我想要的效果..
public static Bitmap getRoundedBitmap(Bitmap bitmap)
{
final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(output);
final int color = Color.WHITE;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawOval(rectF, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
bitmap.recycle();
return output;
}
我猜您用来绘制椭圆的颜色的 ALPHA = 0。请尝试将 Color.WHITE 替换为 Color(1.0f, 1.0f, 1.0f, 1.0f)。告诉我这是否解决了您的问题,然后查看: What does PorterDuff.Mode mean in android graphics.What does it do?
在这种情况下,对于 SRC_IN:[Sa * Da, Sc * Da](取自 android 参考,PorterDuff.Mode)
这是一个使用 XML 中制作的形状的示例。
1) Right-click 在您的可绘制资源文件夹中并创建一个新的可绘制资源文件。
2) 粘贴以下代码。这将创建一个与您想要的背景非常相似的可绘制资源。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size android:width="50dp" android:height="50dp"/>
<solid android:color="@android:color/darker_gray"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<size android:width="50dp" android:height="50dp"/>
<solid android:color="@android:color/white"/>
</shape>
</item>
</layer-list>
3) 在布局中使用资源。用您的 'tick' 资源文件替换我的占位符 Android 复选框。
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/highlight_circle">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@android:drawable/checkbox_on_background"/>
</RelativeLayout>