0

我需要捕获视图到位图。这就是我想这样做:捕获视图到位图返回旧图像

private Bitmap getBitmapFromView1(View rootView) { 
    Bitmap b = Bitmap.createBitmap(rootView.getWidth(), 
     rootView.getHeight(), 
     Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b); 
    rootView.draw(c); 
    return b; 
} 

private Bitmap getBitmapFromView2(View rootView) { 
    rootView.setDrawingCacheEnabled(true); 
    Bitmap bm = Bitmap.createBitmap(rootView.getDrawingCache()); 
    rootView.setDrawingCacheEnabled(false); 

    return bm; 
} 

我也尝试添加buildDrawingCachedestroyDrawingCache到第二功能的不同的地方。

rootView我有一个FrameLayoutRecyclerView里面。有时在滚动此RecyclerView并要求快照后,我得到一个滚动位置较旧的图像。我对这两种功能都有这种效果。

有趣的是,无论是工作,其他的屏幕上精细,其中rootViewDrawerLayout,它也包含RecyclerView

如何总是得到一个新的快照?

回答

1

帮助RecyclerView禁用硬件加速。我将它添加到OnScrollListener以避免滚动滞后。似乎工作。

private RecyclerView.OnScrollListener mSwitchAccelerationListener = new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 

     if (newState == RecyclerView.SCROLL_STATE_IDLE) { 
      mRecyclerView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
     } else { 
      mRecyclerView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
     } 
    } 
}; 

有用的帖子:Efficient "Screenshots" of a View?