afkT/DevUtils

截图工具类

TrueloveSomeGIRl opened this issue · 2 comments

CapturePictureUtils 截图工具类截图Recyclerview的时候 如果item 里面有自定义view+动画 截图下来动画初始值一直未0
请问这个有没有解决办法 谢谢
image

afkT commented

看描述猜测,应该是存在动画且没绘制导致,你可以这样尝试下解决

CapturePictureUtils#snapshotByRecyclerView_LinearLayoutManager

新建一个类,复制该方法代码,并且进行修改 竖屏 的代码

// ===========
// = 竖向滑动 =
// ===========

for (int i = 0; i < itemCount; i++) {
    RecyclerView.ViewHolder holder = adapter.createViewHolder(recyclerView, adapter.getItemViewType(i));
    adapter.onBindViewHolder(holder, i);
    View childView = holder.itemView;
    WidgetUtils.measureView(childView, recyclerView.getWidth());
    bitmaps[i] = canvasBitmap(childView, config);
    height += childView.getMeasuredHeight();
}

修改为自己的 Adapter 并且新增自定义方法,自定义方法主要的作用是对 holder.itemView 里面的动画 View 进行直接赋值并且不做动画效果,且调用 postInvalidate。

这样就能够实现,截图走无动画且进行绘制,非截图则有动画,你看下这样的思路能否正常截出来

afkT commented

看描述猜测,应该是存在动画且没绘制导致,你可以这样尝试下解决

CapturePictureUtils#snapshotByRecyclerView_LinearLayoutManager

新建一个类,复制该方法代码,并且进行修改 竖屏 的代码

// ===========
// = 竖向滑动 =
// ===========

for (int i = 0; i < itemCount; i++) {
    RecyclerView.ViewHolder holder = adapter.createViewHolder(recyclerView, adapter.getItemViewType(i));
    adapter.onBindViewHolder(holder, i);
    View childView = holder.itemView;
    WidgetUtils.measureView(childView, recyclerView.getWidth());
    bitmaps[i] = canvasBitmap(childView, config);
    height += childView.getMeasuredHeight();
}

修改为自己的 Adapter 并且新增自定义方法,自定义方法主要的作用是对 holder.itemView 里面的动画 View 进行直接赋值并且不做动画效果,且调用 postInvalidate。

这样就能够实现,截图走无动画且进行绘制,非截图则有动画,你看下这样的思路能否正常截出来

例:adapter.xxxMethod(childView, adapter.getItemViewType(i)) 这样就能够知道属于什么 viewType