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

标签 android imageview width glsurfaceview layoutparams

这个问题可能看起来微不足道并且被问过很多次,但我找不到适合我的答案。

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

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

当我从 ImageView 更改为 GLSurfaceView 时,我的图像周围出现黑色区域​​,而这些区域在我的 ImageView 中是透明的,因为 GLSurfaceView 在 UI 中打了个洞,工作方式与通常的元素不同,它将我的图像背景绘制为黑色,我不需要它,因为我有自定义背景。

我想出了一个解决方案,以编程方式为 GLSurfaceView 设置 LayoutParams,我使用 Bitmap 宽度和高度,但我最终得到了一个较小的图像。我需要显示图像的确切宽度和高度 - 而不是 ImageView,因为它有透明区域。

PS:我不是 OpenGL 专家,如果您有适用于 OpenGL 的解决方案,请分享。

一)

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

二)

 _______________
|               |
|               |
|---------------|       <-
|   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" />

最佳答案

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。

关于android - 如何在android中获取显示图像的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27413686/

相关文章:

android - 获取 ImageView 的背景颜色

android:如何禁用viewpager上的滚动

html - 分区 : full header without horizontal scrolling (neither with arrow keys)

html - 如何将表格的宽度设置为窗口的宽度

java - Firebase InstanceId 面临一些问题

java - 错误: Attempt to invoke virtual method 'void android.widget.Filter.filter(java.lang.CharSequence)' on a null object reference

Android:在 map 上显示和移动当前位置

java - 单击按钮时显示/隐藏 ImageView

HTML 表格 td 宽度由垂直文本?

android - 在 Android 中读取自定义 HTML 标签并创建链接