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

问题描述:

这个问题可能看起来微不足道,并且被问了很多次,但是我找不到一个适合我的答案。如何在android中获取显示图像的宽度和高度?

我有一个ImageViewGLSurfaceView,当我按下一个按钮时,在ImageView之上绘制。

对于我的ImageView我通过一个Bitmap并将其缩小以避免OutOfMemoryError异常。我的ImageView与我的用户界面中的其他元素对齐,所以它拉伸图像以填充宽度/高度(这是我想要的)。

当我改变从ImageViewGLSurfaceView我避开我的形象黑色区域曾经是透明的,我ImageView,因为GLSurfaceView使得UI有一个洞,作品不同于平常的元素它吸引我的形象的背景为黑色和我不需要它,因为我有自定义背景。

我想出了一个解决方案,以编程方式为GLSurfaceView设置LayoutParams,我使用了Bitmap宽度和高度,但我最终得到的图像更小。我需要显示图像的确切宽度和高度 - 而不是ImageView,因为它具有透明区域。 PS:我不是OpenGL的专家,如果你有一个适用于OpenGL的解决方案,请分享它。

一)

_______________ 
|    | 
|    | 
|---------------|   <- 
| transparent |  
|---------------| <-   Entire 
|    |    ImageView 
|  Image  | need 
|    | only this 
|---------------| <- 
| transparent | 
|---------------|   <- 
|    | 
--------------- 

B)

_______________ 
|    | 
|    | 
|---------------|  <- 
| black  | 
|---------------| 
|    |    
| Image  |   GLSurfaceView 
|    | 
|---------------| 
| black  | 
|---------------|  <- 
|    | 
--------------- 

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" /> 
+0

位图本身是否包含顶部和底部透明区域? – 2015-08-20 05:02:05

+0

不,位图不包含透明区域。 – 2015-09-19 07:16:37

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。

+0

对代码的解释很方便。 – Sipty 2015-08-25 11:24:29