在Android上保存自定义视图的屏幕截图

时间:2015-10-11 06:26:17

标签: android android-layout bitmap android-canvas screenshot

我试图保存当前活动的屏幕截图,但不是整个视图,只是其中的一部分。 就我而言: My activity

在附图中,我想保存一个由视图B,C和C构成的位图。 d。

B是线性布局,C是纯位图,D是相对布局。

据我了解,一种方法是创建一个画布,添加所有元素'进入它,最后得到所需的自定义位图。

我遇到以下代码时出现问题:

<gap:plugin name="org.apache.cordova.camera" />

结果是位图C被绘制为Ok,但是视图B太大并且扩展了位图。 我没有尝试添加视图D ..

任何人都可以帮助我吗?也许有更好的方法来实现我的目标? 谢谢!

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是获取Activity整个内容的屏幕截图,然后裁掉A ViewCanvas#drawBitmap(Bitmap bmp, Rect src, Rect dest, Paint pnt)重载很容易实现。 Rect src描述了您要复制的来源Bitmap部分,而dest是要绘制来源的目标Bitmap的部分。(注意: Rect的大小不必相同。)

如果我正确地关注你,我相信以下方法应该做你想要的。

private Bitmap capture()
{
    View actContent = findViewById(android.R.id.content);

    Bitmap result = Bitmap.createBitmap(actContent.getWidth(),
                                        actContent.getHeight() - viewA.getHeight(),
                                        Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(result);

    actContent.setDrawingCacheEnabled(true);
    Rect src = new Rect(0, viewA.getHeight(), actContent.getWidth(), actContent.getHeight());
    Rect dest = new Rect(0, 0, result.getWidth(), result.getHeight());
    canvas.drawBitmap(actContent.getDrawingCache(), src, dest, null);
    actContent.setDrawingCacheEnabled(false);

    return result;
}