Невозможно получить растровое изображение линейного макета вместе с его дочерними представлениями - PullRequest
0 голосов
/ 09 ноября 2011

Я создаю растровое изображение из линейного макета со следующим кодом

общедоступная статическая битовая карта loadBitmapFromView (View v) {

    //Bitmap b = Bitmap.createBitmap( v.getLayoutParams.width, v.getLayoutParams.height, Bitmap.Config.ARGB_8888);
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams.width, v.getLayoutParams.height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    v.draw(c);
    return b;
}

, но я не могу видеть все виды в этом яможно увидеть большой серый экран

попробовал ответить на этот вопрос также Проблемы с Android при преобразовании ViewGroup с дочерними элементами в растровое изображение , но все еще не работает

Мой вид завышениз xml, и когда я использую код, упомянутый выше, я получаю принудительное закрытие для исключения нулевого указателя, и если я упоминаю ширину и высоту для некоторого числа, например 200, 200, тогда я могу видеть серый фон, но не вид в нем.

1 Ответ

1 голос
/ 09 ноября 2011

Вам нужно измерить вид перед макетом, как

v.measure(
      MeasureSpec.makeMeasureSpec(v.getLayoutParams().width,MeasureSpec.EXACTLY),
      MeasureSpec.makeMeasureSpec(v.getLayoutParams().height, MeasureSpec.EXACTLY));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight()
        ,Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.draw(c);
...