我需要将View捕获到位图。这就是我试图这样做的方式:
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;
}
我还尝试将buildDrawingCache
和destroyDrawingCache
添加到第二个功能的不同位置。
在rootView
我的FrameLayout
里面有一个RecyclerView
。有时在滚动此RecyclerView
并要求快照后,我会得到一个带有较旧滚动位置的图像。我对这两个功能都有这种效果。
有趣的是,在rootView
为DrawerLayout
并且还包含RecyclerView
如何始终获得全新快照?
答案 0 :(得分: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);
}
}
};