是否可以使用视图后面的视图获取绘图缓存?例如,我有一个半透明视图,我可以看到它背后的视图。那么,我可以在后面的视图可见的情况下获得此视图的绘图缓存吗?
我将视图添加到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);
答案 0 :(得分:1)
[编辑] 根据问题的最后修改,我认为这个答案不再合适了。将视图直接添加到WindowManager实际上导致讨论出现一个众所周知的问题:不允许在Android中以编程方式截取屏幕截图,然后下面公开的想法似乎完全不切实际。 所以请不要低估。 [/ EDIT]
AFAIK这不能通过单一视图的drawingCache来实现。为了获得背景上的其他视图,您应该使用视图树中最顶层节点的drawingCache,即包含Activity的内容。获得这样的位图非常简单:
View root = currActivity.getWindow().getDecorView().findViewById(android.R.id.content);
root.setDrawingCacheEnabled(true);
Bitmap bmp = root.getDrawingCache();
然后,为了只获取您感兴趣的位图部分,您将被迫根据View.getLocatonInWindow(int[])
值裁剪生成的位图。
没有证明自己,但我相信它应该有效。