将ListView项目转换为单个位图图像

引用到这个主题: Android获取所有ListView项目的屏幕截图

我想要做这样的事情,但我有自定义适配器,这是抛出我的NullPointerException错误在此代码:

childView.measure(MeasureSpec.makeMeasureSpec(_listView.getWidth(), MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

我的自定义适配器

 public class InvoiceListAdapter extends BaseAdapter { ArrayList<Object> _itemList; public Activity _context; public LayoutInflater _inflater; BarCodeGenerator Generator = new BarCodeGenerator(); public InvoiceListAdapter(Activity context,ArrayList<Object> itemList) { super(); this._context=context; this._itemList=itemList; this._inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return _itemList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return _itemList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } public static class ViewHolder { TextView ProductName; TextView Qnt; ImageView Barcode; TextView BarcodeFormat; Button Del; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null) { holder = new ViewHolder(); convertView = _inflater.inflate(R.layout.custom_row_view, null); holder.ProductName = (TextView) convertView.findViewById(R.id.txt_CRow_ProdName); holder.Qnt = (TextView) convertView.findViewById(R.id.txt_CRow_Qnt); holder.Del = (Button) convertView.findViewById(R.id.btn_CRow_Delete); holder.Barcode = (ImageView) convertView.findViewById(R.id.Img_CRow_Barcode); /*-----------------------------Deleting Item with Button--------------------*/ holder.Del.setTag(holder); convertView.setTag(holder); } else { holder=(ViewHolder)convertView.getTag(); } AnItem Item = (AnItem) _itemList.get(position); holder.ProductName.setText(Item.getProductName()); holder.Qnt.setText(Item.getQnt()); holder.Barcode.setImageBitmap(Generator.Generate(Item.getProductName(), BarcodeFormat.valueOf(Item.getBarcode() ),500,200 ) ); holder.Del.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(_context,"Item Deleted!: "+position, Toast.LENGTH_SHORT).show(); _itemList.remove(position); notifyDataSetChanged(); // TODO Auto-generated method stub } }); return convertView; } } 

我的自定义行:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/txt_CRow_ProdName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/ProductName" android:textSize="16sp" android:textStyle="bold" /> <Button android:id="@+id/btn_CRow_Delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:focusable="false" android:text="@string/Delete" android:textSize="12sp"/> <TextView android:id="@+id/txt_CRow_Qnt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/Img_CRow_Barcode" android:hint="@string/Qnt" android:textSize="12sp" android:textStyle="bold" /> <ImageView android:id="@+id/Img_CRow_Barcode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/txt_CRow_ProdName" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/btn_CRow_Delete" android:layout_alignParentLeft="true" /> </RelativeLayout> 

谢谢你的帮助。

Solutions Collecting From Web of "将ListView项目转换为单个位图图像"

你可以像这样从任何视图获取位图:

 public static Bitmap getBitmapFromView(View view) { Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(returnedBitmap); Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) bgDrawable.draw(canvas); else canvas.drawColor(Color.WHITE); view.draw(canvas); return returnedBitmap; } 

试试这个,并适应你的代码。 希望这个帮助….

 public static Bitmap getWholeListViewItemsToBitmap() { ListView listview = MyActivity.mFocusedListView; ListAdapter adapter = listview.getAdapter(); int itemscount = adapter.getCount(); int allitemsheight = 0; List<Bitmap> bmps = new ArrayList<Bitmap>(); for (int i = 0; i < itemscount; i++) { View childView = adapter.getView(i, null, listview); childView.measure(MeasureSpec.makeMeasureSpec(listview.getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); childView.setDrawingCacheEnabled(true); childView.buildDrawingCache(); bmps.add(childView.getDrawingCache()); allitemsheight+=childView.getMeasuredHeight(); } Bitmap bigbitmap = Bitmap.createBitmap(listview.getMeasuredWidth(), allitemsheight, Bitmap.Config.ARGB_8888); Canvas bigcanvas = new Canvas(bigbitmap); Paint paint = new Paint(); int iHeight = 0; for (int i = 0; i < bmps.size(); i++) { Bitmap bmp = bmps.get(i); bigcanvas.drawBitmap(bmp, 0, iHeight, paint); iHeight+=bmp.getHeight(); bmp.recycle(); bmp=null; } return bigbitmap; } 

简单和简单的方法来做到这一点 –

 public Bitmap getBitmapFromView(View pView, int width, int height){ pView.setDrawingCacheEnabled(true); pView.measure(MeasureSpace.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); pView.layout(0, 0, width, height); pView.buildDrawingCache(true); Bitmap bitmap = Bitmape.createScaledBitmap(pView.getDrawingCache(), width, height, false); pView.setDrawingCacheEnabled(false); return bitmap; }