gpt4 book ai didi

android - 从 View 创建位图使 View 消失,如何获取 View Canvas ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:21 25 4
gpt4 key购买 nike

我发现了两种从 View 创建位图的方法。但是一旦我这样做了, View 就消失了,我不能再使用它了。生成位图后如何重绘 View ?

第一:

public static Bitmap getBitmapFromView(View view) {
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
Drawable bgDrawable =view.getBackground();
if (bgDrawable!=null)
bgDrawable.draw(canvas);
else
canvas.drawColor(Color.WHITE);
view.draw(canvas);
return returnedBitmap;
}

第二个:

Bitmap viewCapture = null;

theViewYouWantToCapture.setDrawingCacheEnabled(true);

viewCapture = Bitmap.createBitmap(theViewYouWantToCapture.getDrawingCache());

theViewYouWantToCapture.setDrawingCacheEnabled(false);

编辑

所以,我想我明白第一个发生了什么,我们基本上是从它的原始 Canvas 中删除 View 并将其绘制到与该位图关联的其他地方。我们能否以某种方式存储原始 Canvas ,然后将 View 设置为在那里重绘?

最佳答案

抱歉,我对此不是很了解。但我使用以下代码:

public Bitmap getBitmapFromView(View view, int width, int height) {
Bitmap returnedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
Drawable bgDrawable = view.getBackground();
if (view==mainPage.boardView) {
canvas.drawColor(BoardView.BOARD_BG_COLOR);
} else if (bgDrawable!=null) {
bgDrawable.draw(canvas);
} else {
canvas.drawColor(Color.WHITE);
}
view.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
view.layout(0, 0, width, height);
view.draw(canvas);
return returnedBitmap;
}

这与您的非常相似,我怀疑我们是从同一个地方复制和编辑的。

我没有遇到 View 从原始绘图树中消失的问题。我的是为 ViewGroups 而不是普通的 Views 调用的。

关于android - 从 View 创建位图使 View 消失,如何获取 View Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14492354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com