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
。其他意见被接受。
答案 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