2013-04-05 3 views
0

При попытке сделать снимок экрана пользовательского вида я получил IllegalArgumentException : width and height must be >0. Вот что я писал:IllegalArgumentException при съемке снимка пользовательского вида

bitmap = loadBitmapFromView(v1);//v1 the custom view I want to picture. 
public static Bitmap loadBitmapFromView(View v) { 
Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);     
Canvas c = new Canvas(b); 
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); 
v.draw(c); 
return b; 
} 

линия, в которой есть исключение: Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Конечно код снимок экрана выполняется после зрения показал, на next_act код кнопки

+0

Где этот код? В каком методе? Откуда вы это называете? – Simon

+0

Код выше, строка для вызова и метод – user2137817

+0

№. Где этот код в вашей программе? в onCreate() в пользовательском методе? Как называется код? – Simon

ответ

0

Ширина и высота LayoutParams может быть постоянной, такой как FILL_PARENT, и они являются отрицательными числами.

Чтобы получить измеряемые размеры вида по вы можете использовать:

v.getMeasuredWidth() and v.getMeasuredHeight() 

Однако, это зависит от того, что вы после этого, и был ли измерен вид.

Возможно, имеет смысл подождать до тех пор, пока изображение не будет нарисовано, прежде чем сделать снимок экрана ;-) Но вам нужно будет объяснить больше о вашем случае использования.

+0

Я уже пробовал это: v.measure (MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED)); Bitmap b = Bitmap.createBitmap (v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888); , но это же исключение – user2137817

+0

Вы пробовали передать некоторые значения v.measure(). Например. display = getWindowManager(). getDefaultDisplay(); v.measure (display.getWidth(), display.getHeight()); – Ryan

+0

когда я пишу это: Display display = getWindowManager(). GetDefaultDisplay(); У меня есть ошибка, в которой eclipse скажет мне переименовать getWindowManager – user2137817

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