如何在android中获取显示图像的宽度和高度?
这个问题可能看起来微不足道,并且被问了很多次,但是我找不到一个适合我的答案。如何在android中获取显示图像的宽度和高度?
我有一个ImageView
和GLSurfaceView
,当我按下一个按钮时,在ImageView
之上绘制。
对于我的ImageView
我通过一个Bitmap
并将其缩小以避免OutOfMemoryError
异常。我的ImageView
与我的用户界面中的其他元素对齐,所以它拉伸图像以填充宽度/高度(这是我想要的)。
当我改变从ImageView
到GLSurfaceView
我避开我的形象黑色区域曾经是透明的,我ImageView
,因为GLSurfaceView
使得UI有一个洞,作品不同于平常的元素它吸引我的形象的背景为黑色和我不需要它,因为我有自定义背景。
我想出了一个解决方案,以编程方式为GLSurfaceView
设置LayoutParams
,我使用了Bitmap
宽度和高度,但我最终得到的图像更小。我需要显示图像的确切宽度和高度 - 而不是ImageView
,因为它具有透明区域。 PS:我不是OpenGL的专家,如果你有一个适用于OpenGL的解决方案,请分享它。
一)
_______________
| |
| |
|---------------| <-
| 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" />
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);
像素MM
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。
对代码的解释很方便。 – Sipty 2015-08-25 11:24:29
位图本身是否包含顶部和底部透明区域? – 2015-08-20 05:02:05
不,位图不包含透明区域。 – 2015-09-19 07:16:37