在Android中将视图转换为位图而不显示它?

157

我将尝试解释我需要做的事情。

我有三个独立的屏幕,称为A、B、C。另外还有一个称为HomeScreen的屏幕,所有3个屏幕的位图应该以画廊视图显示,并且用户可以选择要进入哪个视图。

我已经能够获得所有3个屏幕的位图,并通过在HomeScreen Activity中放置所有代码来显示它们的画廊视图。现在,这使得代码变得非常复杂,我想要简化它。

那么,我可以从HomeScreen调用另一个Activity,而不必显示它,只需获取该屏幕的位图即可。例如,我只是调用HomeScreen并调用Activity A、B、C,而不显示A、B、C中的任何一个Activity。它只会通过getDrawingCache()方法提供该屏幕的位图。然后我们可以在HomeScreen中以画廊视图显示这些位图。

我希望我已经非常清楚地解释了问题。

请让我知道这是否真的可行。


1
我不是很确定,但我觉得你做不到那个。问题在于活动是要展示给用户的。你可以启动活动然后立即隐藏它,但活动仍然会在用户面前显示一瞬间。它展示的时间足够被注意到,因此屏幕闪烁几次会让应用看起来不专业。不过,也可能有一种命令可以启动活动而不显示它;如果存在的话,我就不知道。 - Steve Haley
6
实际上,我能够做到这件事。 - sunil
哦,你怎么能称之为活动而不显示它呢?我可以将当前活动的布局作为模板,在向其中提供不同内容的同时生成位图吗? - zionpi
请在此帖子中检查答案,我找到了某种解决方案:http://stackoverflow.com/questions/36424381/save-multiple-textviews-as-image-of-large-resolution/36455437#36455437 - Wackaloon
以上回答对我都没有用,只有这个有效 https://dev59.com/mm035IYBdhLWcg3wPdgS#26086145 - sum20156
13个回答

0

我在我的项目中遇到了同样的问题,并找到了一个解决方案,我将在这里描述。

public Bitmap catchBitmapFromView(View capture_view){
        if (capture_view == null) {
            return null;
        }

        capture_view.setDrawingCacheEnabled(true);

        Bitmap bitmap = Bitmap.createBitmap(capture_view.getWidth(), capture_view.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        Drawable bgDrawable = capture_view.getBackground();
        if (bgDrawable != null) {
            bgDrawable.draw(canvas);
        } else {
            canvas.drawColor(Color.WHITE);
        }
        capture_view.draw(canvas);

        capture_view.setDrawingCacheEnabled(false);
        return bitmap;
}

0
private fun getBitmapFromView(view: View): Bitmap
{
    val returnedBitmap = Bitmap.createBitmap(view.width,
        view.height
    ,Bitmap.Config.ARGB_8888)

    val canvas = Canvas(returnedBitmap)

    //background image
    val bgDrawable = view.background

    //background image is selected
    if (bgDrawable != null){
        bgDrawable.draw(canvas)
    }
    else{
        canvas.drawColor(Color.WHITE)
    }
    
    view.draw(canvas)
    
    return returnedBitmap

}

-3
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);

请解释这是做什么的。 - Paul Floyd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接