拍摄完整长度的RecyclerView屏幕截图

我想获得活动的“全页”屏幕截图。该视图包含一个RecyclerView,其中包含许多项。

我可以使用此功能拍摄当前视图的屏幕截图:

public Bitmap getScreenBitmap() {

View v= findViewById(R.id.container).getRootView();

v.setDrawingCacheEnabled(true);

v.buildDrawingCache(true);

Bitmap b = Bitmap.createBitmap(v.getDrawingCache());

v.setDrawingCacheEnabled(false); // clear drawing cache

return b;

}

但是它仅包含我可以正常查看的项目(符合预期)。

如果没有,我应该如何解决这个问题?

回答:

这是我的解决方案,LinearLayoutManager当 并且

。此解决方案基于此答案。

:这可能会导致内存不足错误。

public static Bitmap getRecyclerViewScreenshot(RecyclerView view) {

int size = view.getAdapter().getItemCount();

RecyclerView.ViewHolder holder = view.getAdapter().createViewHolder(view, 0);

view.getAdapter().onBindViewHolder(holder, 0);

holder.itemView.measure(View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY),

View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

holder.itemView.layout(0, 0, holder.itemView.getMeasuredWidth(), holder.itemView.getMeasuredHeight());

Bitmap bigBitmap = Bitmap.createBitmap(view.getMeasuredWidth(), holder.itemView.getMeasuredHeight() * size,

Bitmap.Config.ARGB_8888);

Canvas bigCanvas = new Canvas(bigBitmap);

bigCanvas.drawColor(Color.WHITE);

Paint paint = new Paint();

int iHeight = 0;

holder.itemView.setDrawingCacheEnabled(true);

holder.itemView.buildDrawingCache();

bigCanvas.drawBitmap(holder.itemView.getDrawingCache(), 0f, iHeight, paint);

holder.itemView.setDrawingCacheEnabled(false);

holder.itemView.destroyDrawingCache();

iHeight += holder.itemView.getMeasuredHeight();

for (int i = 1; i < size; i++) {

view.getAdapter().onBindViewHolder(holder, i);

holder.itemView.setDrawingCacheEnabled(true);

holder.itemView.buildDrawingCache();

bigCanvas.drawBitmap(holder.itemView.getDrawingCache(), 0f, iHeight, paint);

iHeight += holder.itemView.getMeasuredHeight();

holder.itemView.setDrawingCacheEnabled(false);

holder.itemView.destroyDrawingCache();

}

return bigBitmap;

}

它最初是用Kotlin编写的。这是我使用的原始代码。

以上是 拍摄完整长度的RecyclerView屏幕截图 的全部内容, 来源链接: utcz.com/qa/419146.html

回到顶部