Как получить ширину и высоту изображения в Android?
Этот вопрос может показаться тривиальным и задавался много раз, но я не мог найти ответа, который будет работать на меня.
У меня есть ImageView и GLSurfaceView, которые рисуются поверх ImageView, Когда я нажимаю кнопку.
Для моего ImageView я передаю Bitmap и уменьшаю его, чтобы избежать исключения OutOfMemoryError. Мой ImageView выровнен по другим элементам в моем пользовательском интерфейсе, поэтому он растягивает изображение, чтобы заполнить ширину/высоту (это то, что я хочу).
Когда я меняю ImageView на GLSurfaceView, я получаю черные области вокруг моего изображения, которое раньше было прозрачным в моем ImageView, потому что GLSurfaceView делает дыру в пользовательском интерфейсе и работает иначе, чем обычные элементы, он рисует фон моего изображения черным, и мне это не нужно, потому что у меня есть пользовательский фон.
Я пришел с решением установить
LayoutParams для GLSurfaceView программно и использую Bitmap ширину и высоту, но в итоге получаю меньшее изображение. Мне нужна точная ширина и высота отображаемого изображения, а не ImageView, потому что оно прозрачное регионы.PS: Я не эксперт OpenGL, и если у вас есть решение, которое работает для OpenGL, пожалуйста, поделитесь им.
A)
_______________
| |
| |
|---------------| <-
| transparent |
|---------------| <- Entire
| | ImageView
| Image | need
| | only this
|---------------| <-
| transparent |
|---------------| <-
| |
---------------
B)
_______________
| |
| |
|---------------| <-
| black |
|---------------|
| |
| Image | GLSurfaceView
| |
|---------------|
| black |
|---------------| <-
| |
---------------
Мои ImageView и GLSurfaceView:
<android.opengl.GLSurfaceView
android:id="@+id/glsvImageHolder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/horScrollImage"
android:layout_marginBottom="5dp"
android:layout_marginTop="50dp"
android:visibility="invisible" />
<ImageView
android:id="@+id/ivImageHolder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/horScrollImage"
android:layout_marginBottom="5dp"
android:layout_marginTop="50dp"
android:visibility="visible" />
1 ответ:
float widthPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, pxToMm(ivImageHolder.getWidth(), context), getResources().getDisplayMetrics()); float heightPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, pxToMm(ivImageHolder.getHeight(), context), getResources().getDisplayMetrics()); ViewGroup.LayoutParams layoutParams= glsvImageHolder.getLayoutParams(); layoutParams.width= (int) widthPx; layoutParams.height= (int) heightPx; glsvImageHolder.setLayoutParams(layoutParams);Пиксель в ММ
public static float pxToMm(final float px, final Context context) { final DisplayMetrics dm = context.getResources().getDisplayMetrics(); return px / TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, 1, dm); }Сделайте ширину и высоту GLSurfaceView: wrap_content.
Comments