创建位图的完整列表视图与所有项目(没有得到32位非法的argumentexception)



我想在我的应用程序中创建一个完整的listview的位图(这反过来将被转换为。png文件)。但是当我从listview子视图中获得位图时,我得到一个

java.lang.IllegalArgumentException: bitmap size exceeds 32bits

是否有可能重写此行为?或者以一种不会被抛出的方式执行?

我问的原因是我想在我的网站上有这个列表的图片,截图将是一个非常繁琐的过程(列表中有400多个项目,一次有6个在屏幕上可见)

根据请求,这里是我正在运行的代码来创建位图atm:

public static Bitmap getWholeListViewItemsToBitmap() {
ListView listview = getListView();
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;
}

这里是抛出的异常(请注意,这是我得到的,Android Studio不为我工作,我所能保存的是一半的堆栈跟踪)

E/AndroidRuntime(375): FATAL EXCEPTION: main
E/AndroidRuntime(375): java.lang.IllegalArgumentException: bitmap size exceeds 32bits
E/AndroidRuntime(375):  at android.graphics.Bitmap.nativeCreate(Native Method)
E/AndroidRuntime(375):  at android.graphics.Bitmap.createBitmap(Bitmap.java:477)
E/AndroidRuntime(375):  at android.view.View.buildDrawingCache(View.java:6577)

非常确定硬件加速视图有48位颜色,因此禁用ListView项的硬件加速应该可以修复绘图缓存。我不会在未来的版本中依赖于绘图缓存。

相关内容

  • 没有找到相关文章

最新更新