-1

是否可以使用视图后面的视图获取绘图缓存?例如,我有一个半透明的视图,我可以看到它背后的视图。那么,我可以在后面的视图可见的情况下获得该视图的绘图缓存吗?

我将视图添加到 WM 的代码:

 final View screenshotView = new View(this) {
                    @Override
                    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
                        super.onLayout(changed, left, top, right, bottom);

                        if (!changed) {
                            buildDrawingCache();
                            final Bitmap bitmap = Bitmap.createBitmap(getDrawingCache());
                            final File file = new File("/sdcard/test.png");
                            try {
                                file.createNewFile();
                                FileOutputStream ostream = new FileOutputStream(file);
                                bitmap.compress(Bitmap.CompressFormat.PNG, 100, ostream);
                                ostream.close();
                            } catch (Exception e) {
                                Log.e(TAG, e.toString());
                            }
                        }
                    }
                };

WindowManager.LayoutParams screenShotViewLp = new WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.RGBA_8888);
                screenShotViewLp.width = WindowManager.LayoutParams.MATCH_PARENT;
                screenShotViewLp.height = WindowManager.LayoutParams.MATCH_PARENT;
                screenShotViewLp.gravity = Gravity.LEFT | Gravity.TOP;

                wm.addView(screenshotView, screenShotViewLp);
4

1 回答 1

1

[编辑]根据问题的最后编辑,我认为这个答案不再适合。将视图直接添加到 WindowManager 事实上将讨论引向一个众所周知的问题:不允许在 Android 中以编程方式截取屏幕截图,然后下面公开的想法似乎完全不切实际。所以请不要低估。[/编辑]

AFAIK 这不能通过单个视图的绘图缓存来实现。为了获得背景上的其他视图,您应该获取视图树中最顶层节点的绘图缓存,即包含 Activity 的内容。获取这样的位图非常简单:

View root = currActivity.getWindow().getDecorView().findViewById(android.R.id.content);
root.setDrawingCacheEnabled(true);
Bitmap bmp = root.getDrawingCache();

然后,为了只获取您感兴趣的位图部分,您必须根据View.getLocatonInWindow(int[])值裁剪生成的位图。

还没有证明自己,但我很有信心它应该会奏效。

于 2013-04-19T02:13:25.260 回答