2013-02-19 2 views
0

Я пытаюсь создать растровое изображение из относительного макета, который я создал программно. Realtivelayout показывает, как ожидается, но когда я пытаюсь создать растровое изображение, оно возвращает незаконное исключение аргумента, что высота и ширина должна быть> 0 это то, как я делаю этоРисование растрового изображения с относительным макетом возвращает unsargargumentexception

Bitmap.createBitmap(saveLayout.getWidth(), 
      saveLayout.getHeight(), Bitmap.Config.ARGB_8888); 

Есть указатели?

Edit: добавил этот код, тоже:

ViewTreeObserver viewTreeObserver = saveLayout.getViewTreeObserver(); 
    if (viewTreeObserver.isAlive()) { 
     viewTreeObserver 
       .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         saveLayout.getViewTreeObserver() 
           .removeGlobalOnLayoutListener(this); 
         viewWidth = saveLayout.getWidth(); 
         viewHeight = saveLayout.getHeight(); 

        } 
       }); 
    } 

В выше данного кода onGlobalLayout() также никогда не казалось, что называется.

ответ

1

Если вы программно создаете saveLayout, вы можете запросить его ширину и высоту слишком рано. (Просто догадка, потому что я не могу видеть остальную часть кода)

See this explanation

The reason why that createBitmap() call throws that exception is:

, если ширина или высота равны < = 0

Так , попробуйте отложить создание Bitmap до после, появится представление или найдите другой способ расчета ширины/высоты.

This question has a few options/answers for how to defer this calculation to avoid 0 results

+0

Эй, спасибо за помощь Теперь я пытаюсь использовать этот код, чтобы получить ширину и высоту ViewTreeObserver viewTreeObserver = saveLayout.getViewTreeObserver(); \t \t если (viewTreeObserver.isAlive()) { \t \t \t viewTreeObserver \t \t \t \t \t .addOnGlobalLayoutListener (новый OnGlobalLayoutListener() { \t \t \t \t \t \t @Override \t \t \t \t \t \t общественного недействительными onGlobalLayout() { \t \t \t \t \t \t \t saveLayout.getViewTreeObserver() \t \t \t \t \t \t \t \t \t .removeGlobalOnLayoutListener (это); \t \t \t \t \t \t \t viewWidth = saveLayout.getWidth(); \t \t \t \t \t \t \t viewHeight = saveLayout.GetHeight(); \t \t \t \t \t \t} \t \t \t \t \t}); , но на глобальном макете, похоже, не вызывали, можете ли вы объяснить почему? –

+0

Пожалуйста, добавьте дополнительный код в свой ** вопрос ** выше (используя ссылку ** edit ** ниже) и отформатируйте его как код. Трудно прочитать, что вы только что отправили сюда. Благодарю. – Nate

+0

вопрос отредактирован :) –

Смежные вопросы