想要分别使用RecyclerView的每个View的ScreentShot

时间:2018-01-03 14:25:04

标签: java android listview

OnBind recyclervIEW: -

@Override
public void onBindViewHolder(final ItemViewHolder holder, final int position)
{
  holder. tv_bill_no.setText(context.getString(R.string.bill_no_display , 
    String.valueOf(12))  );
    holder.tv_total_amt_label.setBackground(context.getResources().getDrawable(R.drawable.textline));
    holder.lv_product_sub_totals.setEmptyView(holder.emptyview);
    Typeface typeface=Typeface.createFromAsset(context.getAssets(),"Capture_it.ttf");
    holder.tv_dist_name.setTypeface(typeface);
    holder.tv_generate.setTypeface(typeface);
    holder.btn_generate_pdf.setVisibility(View.GONE);
   // itemView.setVisibility(View.GONE);
    holder.btn_generate.setVisibility(View.GONE);
    holder.btn_share.setVisibility(View.GONE);

    holder.ll.setDrawingCacheEnabled(true);
    // ImageView iv = (ImageView) rootview.findViewById(R.id.bdf_iv_bill);

    Bitmap bm = Utility.screenShot(holder.ll);
    bitmap_pdf_pages.add(bm);

    Log.e("width",""+holder.ll.getWidth());

   }

它抛出一个错误 java.lang.IllegalArgumentException: width and height must be > 0

我正在做的是OnBind我正在查看每个视图的screenshot并将其添加到ArrayList<Bitmap>但我无法这样做。我想要一个解决方案,我可以单独使用screenshots的{​​{1}} views。其他意见被接受。

1 个答案:

答案 0 :(得分:1)

抛出错误是因为View.getHeight()(我假设它在Utility.screenShot(holder.ll)中使用)只有在测量视图后才有值,而OnBindViewHolder还没有发生。

因此,您必须手动强制执行该操作并使用view.getMeasuredHeight(),在您使用屏幕截图&#34;之前采取与axml中定义的约束相同的约束。

对于示例,我的宽度和高度测量值为300。

View u = holder.ll;
holder.ll.measure(View.MeasureSpec.makeMeasureSpec(300, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(300, View.MeasureSpec.EXACTLY));
u.setDrawingCacheEnabled(true);
int totalHeight = holder.ll.getMeasuredHeight();
int totalWidth = holder.ll.getMeasuredWidth();
u.layout(0, 0, totalWidth, totalHeight);    
u.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(u.getDrawingCache());             
u.setDrawingCacheEnabled(false);

来源:

HIH