2011-07-28 45 views
2

我一直在尝试创建列表视图的位图,其中整个列表视图在屏幕上不可见。我正在使用使用位图列表视图

Bitmap mBitmap = fullView.getDrawingCache(); 

创建位图。它适用于在屏幕上可见的列表视图部分,但不适用于不是不可见的部分。我想知道是否可以创建列表视图的位图而无需在屏幕上完全显示它。所有的建议和解决方案都很赞赏。

回答

0

由于android只绘制可见的东西,可能想法是将位图分片,然后将位图分组到一个位图。您可以先获取前n个项目的位图。然后使用scrollTo方法滚动到之前的n个项目之外,并获得下n个项目的位图。这样你就可以获得整个列表视图的位图。

+0

你有这个工作这种方法的看法?我正在尝试解决同样的问题,并且scrollTo似乎不适合我。我正在使用scrollTo(0,我*高度),其中高度是listView.getChildAt(0).getHeight() – 8oh8

0

尝试使用此方法。这里的黑客正在调用视图的布局和度量方法。

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));