如何解决清除/重置整个 ImageView 画布
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/takenPicture"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<com.example.dochjavatestimplementation.pkgActivity.ExtendedImageView
android:id="@+id/takenPicture2"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
第一个 ImageView 显示一个位图,第二个 ImageView
(1) 是一个自定义的 ImageView
(ExtendedImageView
) (2) 它绘制一个显示在法线之上的画布图像视图。
这看起来像这样:
displayimageviews
我想要的是在我的 onDraw
方法中绘制矩形之后,我想再次清除矩形(现在只是为了测试目的)。这是我的代码的样子:
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setstrokeWidth(3);
canvas.drawRect(new Rect(212,-720,600),paint);
//clear the rect/contents of canvas again
//try 1
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.MULTIPLY);
canvas.drawColor(0,PorterDuff.Mode.CLEAR);
//try2
Paint transparent = new Paint();
transparent.setAlpha(0);
canvas.drawPaint(transparent);
//try3
setimageResource(0);
}
我尝试以三种不同的方式清除画布/矩形,如上面的代码所示,但它不会改变输出,因为黑色矩形仍然可见。 我现在的问题是可能是什么原因?是因为我没有“更新”画布还是因为我尝试清除画布?
最终的结果应该是我只看到了第一个 imageview
解决方法
在 View.onDraw() 中在 Canvas 上绘制形状是低级函数,它在最后阶段直接更改显示器上的像素。所以,如果你曾经画过什么东西,就不可能抹去它。它没有缓冲。屏幕上只剩下混合的 RGB(w/o A) 像素。之前的像素颜色(源自“takenPicture”)已经丢失。
如果您想让形状可擦除,请准备另一个由 ARGB 位图支持的画布并在其上绘制所有内容。然后最后在画布上绘制位图。
@Override
protected void onDraw(Canvas canvas)
{
// Prepare Bitmap and Canvas
Bitmap bitmap = Bitmap.createBitmap(getWidth(),getHeight(),Bitmap.Config.ARGB_8888);
Canvas draw_canvas = new Canvas(bitmap);
// Draw a rect.
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
draw_canvas.drawRect(new Rect(212,-720,600),paint);
// Clear
draw_canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.SRC);
// Draw the bitmap.
canvas.drawBitmap(bitmap,null);
bitmap.recycle();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。