getDrawingCache总是返回相同的位图

我目前正在开发一个项目,需要显示灰色(黑色/白色)背景的对话框。 为了实现这一点,我正在截取整个应用程序的屏幕截图,并在全屏对话框的背景上放置此屏幕截图,并在其上放置一个ColorFilter以使其变为灰色。

这是第一次完美的工作,但是如果我滚动下面的内容并再次请求对话框,它将显示与前一个相同的背景。

我使用的代码是:

Bitmap bitmap; View rootView = getActivity().getWindow().getDecorView().findViewById(android.R.id.content); rootView.setDrawingCacheEnabled(true); bitmap = Bitmap.createBitmap(rootView.getDrawingCache()); rootView.setDrawingCacheEnabled(false); imageView.setImageBitmap(bitmap); 

换句话说,getDrawingCache()总是返回应用程序的相同屏幕截图。

Solutions Collecting From Web of "getDrawingCache总是返回相同的位图"

我想这是因为你的旧位图仍然在你的绘图caching中。 因此,您首先需要从caching中删除它,然后将新的图像放入caching中。 看看这个问题,这似乎是在同一个话题:

删除绘图caching

编辑:所以,这里是为我工作的代码。 我使用button来保存位图,然后将位图设置为图像视图:

 private View rootView; private ImageView bitmapView; private Button switchButton; public Bitmap capturedScreen; public boolean bitmapNeeded = false; ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // do the other stuff rootView.setDrawingCacheEnabled(true); //enable Drawing cache on your view switchButton.setOnClickListener(this); } ... @Override public void onClick(View v) { if (v == switchButton) { //when the button is clicked captureScreen(); } } public void captureScreen() { rootView.buildDrawingCache(); capturedScreen = Bitmap.createBitmap(rootView.getDrawingCache()); imageView.setImageBitmap(capturedScreen); rootView.destroyDrawingCache(); } .... //In the onDraw method of your View: @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(capturedScreen, 0, 0, paint); } 

这是如何工作的:每次用户点击button, rootView一切都保存为位图,然后绘制到rootView 。 如果需要,您当然可以从代码中的任何位置调用CaptureScreen方法。

我希望这个例子可以帮助你。