如何在android中获取显示图像的宽度和高度?

Fed*_*nov 12 android width glsurfaceview imageview layoutparams

这个问题可能看似微不足道,并且多次被问过,但我找不到对我有用的答案.

我有一个ImageViewGLSurfaceView被绘制在上面ImageView,当我按下一个按钮.

对于我,ImageView我传递一个Bitmap并缩小它以避免OutOfMemoryError异常.我ImageView与UI中的其他元素对齐,因此它会拉伸图像以填充宽度/高度(这就是我想要的).

当我从改变ImageViewGLSurfaceView我避开我的形象曾经是我的透明的黑色区域ImageView,因为GLSurfaceView使得UI有一个洞,工作方式不同比平时元素它吸引我的形象,以黑色的背景,我并不需要它,因为我有自定义背景.

我来到了一个解决方案来LayoutParams进行GLSurfaceView编程和我使用的Bitmap宽度和高度,但我结束了一个更小的图像.我需要显示图像的确切宽度和高度 - 而不是ImageView因为它有透明区域.

PS:我不是OpenGL专家,如果你有一个适用于OpenGL的解决方案,请分享.

一个)

 _______________
|               |
|               |
|---------------|          <-
|   transparent |     
|---------------| <-            Entire
|               |               ImageView
|     Image     |   need
|               | only this
|---------------| <-
|   transparent |
|---------------|          <-
|               |
 ---------------
Run Code Online (Sandbox Code Playgroud)

b)

 _______________
|               |
|               |
|---------------|       <-
|   black       |
|---------------|
|               |              
|    Image      |          GLSurfaceView
|               |
|---------------|
|   black       |
|---------------|       <-
|               |
 ---------------
Run Code Online (Sandbox Code Playgroud)

ImageViewGLSurfaceView:

<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" />
Run Code Online (Sandbox Code Playgroud)

Dau*_*evy 4

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);
Run Code Online (Sandbox Code Playgroud)

像素到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);
}
Run Code Online (Sandbox Code Playgroud)

设置 GLSurfaceView 的宽度和高度:wrap_content。