【问题标题】:List View using bitmap使用位图的列表视图
【发布时间】:2011-07-28 19:08:41
【问题描述】:

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

Bitmap mBitmap = fullView.getDrawingCache();

创建位图。它适用于屏幕上可见的列表视图部分,但不适用于不可见的部分。我想知道是否可以创建列表视图的位图而不必在屏幕上完全显示.感谢所有建议和/或解决方案。

【问题讨论】:

    标签: android listview bitmap


    【解决方案1】:

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

    【讨论】:

    • 你有这个工作吗?我正在尝试解决同样的问题,而 scrollTo 似乎对我不起作用。我正在使用 scrollTo(0, i*height) 高度为 listView.getChildAt(0).getHeight()
    【解决方案2】:

    尝试使用此方法。这里的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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      相关资源
      最近更新 更多