【发布时间】:2011-07-28 19:08:41
【问题描述】:
我一直在尝试创建列表视图的位图,其中整个列表视图在屏幕上不可见。我正在使用
Bitmap mBitmap = fullView.getDrawingCache();
创建位图。它适用于屏幕上可见的列表视图部分,但不适用于不可见的部分。我想知道是否可以创建列表视图的位图而不必在屏幕上完全显示.感谢所有建议和/或解决方案。
【问题讨论】:
我一直在尝试创建列表视图的位图,其中整个列表视图在屏幕上不可见。我正在使用
Bitmap mBitmap = fullView.getDrawingCache();
创建位图。它适用于屏幕上可见的列表视图部分,但不适用于不可见的部分。我想知道是否可以创建列表视图的位图而不必在屏幕上完全显示.感谢所有建议和/或解决方案。
【问题讨论】:
由于 android 只绘制可见的内容,因此可能的想法是将位图分成几部分,然后将位图组合成一个。您可以先获取前 n 个项目的位图。然后使用 scrollTo 方法滚动到前 n 项之外并获取下 n 项的位图。这样就可以得到整个列表视图的位图。
【讨论】:
尝试使用此方法。这里的hack就是自己调用view的layout和measure方法。
public Bitmap loadBitmapFromView(View v) {
v.setLayoutParams(new ViewGroup.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(v.getMeasuredWidth(),
v.getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
v.draw(c);
return bitmap;
}
像这样在这个方法中传递视图
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflatedFrame = inflater.inflate(R.layout.my_view, null);
Bitmap bitmap = loadBitmapFromView(inflatedFrame.findViewById(R.id.id_of_your_view_in_layout));
【讨论】: