获取绘图缓存不包括最近以编程方式显示的视图

时间:2015-10-23 10:13:21

标签: android android-bitmap

我有一个根RelativeLayout并尝试捕获整个视图,然后在捕获视图之前我正在改变某些视图的可见性。

我的问题是最近可见的项目不在绘图缓存的位图中。

顶部屏幕在位图中看起来很好但在底部屏幕的位置有一个黑色而不是以编程方式显示的视图(llTagline)。在此代码执行后,llTagline在屏幕上真的可见,但在位图中却不可见。

我已经看到很多关于在 SO 上绘制缓存的问题,但我的问题没有解决方案。

这是我的代码。

rlEditorParent是我的活动的根布局,RelativeLayout

   @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            llBottomBar.setVisibility(View.GONE);
            llTagline.setVisibility(View.VISIBLE);
            mDrawerLayout.setVisibility(View.INVISIBLE);
            llTopBar.setVisibility(View.INVISIBLE);
            ivRemoveFinish.setVisibility(View.INVISIBLE);
            rlEditorParent.invalidate();
            rlEditorParent.setDrawingCacheEnabled(true);
            rlEditorParent.destroyDrawingCache();
            rlEditorParent.buildDrawingCache(true);
            finalBitmap = rlEditorParent.getDrawingCache(true);
        }};

我也试过

finalBitmap = Bitmap.createBitmap(rlEditorParent.getWidth(),
                    rlEditorParent.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(finalBitmap);
            rlEditorParent.layout(rlEditorParent.getLeft(),
                    rlEditorParent.getTop(), rlEditorParent.getRight(),
                    rlEditorParent.getBottom());
            rlEditorParent.draw(c);

我在应用中的真实屏幕是

 My real screen in the app is

我在finalBitmap中获得的是

 What i am getting in finalBitmap

1 个答案:

答案 0 :(得分:0)

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        llBottomBar.setVisibility(View.GONE);
        llTagline.setVisibility(View.VISIBLE);
        mDrawerLayout.setVisibility(View.INVISIBLE);
        llTopBar.setVisibility(View.INVISIBLE);
        ivRemoveFinish.setVisibility(View.INVISIBLE);
        rlEditorParent.invalidate();
        rlEditorParent.setDrawingCacheEnabled(true);            
        rlEditorParent.buildDrawingCache(true);
        finalBitmap = rlEditorParent.getDrawingCache(true);
        rlEditorParent.destroyDrawingCache();
    }};

试试这个。