Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中获得显示图像的宽度和高度?_Android_Imageview_Width_Glsurfaceview_Layoutparams - Fatal编程技术网

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

如何在android中获得显示图像的宽度和高度?,android,imageview,width,glsurfaceview,layoutparams,Android,Imageview,Width,Glsurfaceview,Layoutparams,这个问题可能看起来很琐碎,被问了很多次,但我找不到一个适合我的答案 我有一个ImageView和GLSurfaceView,当我按下按钮时,它被绘制在ImageView的顶部 对于我的ImageView我传递了一个Bitmap并将其缩小,以避免出现OutOfMemoryError异常。我的ImageView与UI中的其他元素对齐,因此它会拉伸图像以填充宽度/高度(这是我想要的) 当我从ImageView更改为GLSurfaceView时,我的图像周围会出现黑色区域,在我的ImageView中,黑

这个问题可能看起来很琐碎,被问了很多次,但我找不到一个适合我的答案

我有一个
ImageView
GLSurfaceView
,当我按下按钮时,它被绘制在
ImageView
的顶部

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

当我从
ImageView
更改为
GLSurfaceView
时,我的图像周围会出现黑色区域,在我的
ImageView
中,黑色区域是透明的,因为
GLSurfaceView
会在UI中留下一个洞,并且工作方式与通常的元素不同,它会将我图像的背景绘制为黑色,我不需要它,因为我有自己的背景

我找到了一个解决方案,通过编程为
GLSurfaceView
设置
LayoutParams
,并使用
Bitmap
宽度和高度,但最终得到的图像更小。我需要显示图像的准确宽度和高度,而不是
ImageView
,因为它有透明区域

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

(a)

像素到毫米

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的宽度和高度:包裹内容。

位图本身是否包含顶部和底部透明区域?不,位图不包含透明区域。这只是将某物的宽度和高度从任意单位(可能是px)转换为mm。。。
 _______________
|               |
|               |
|---------------|       <-
|   black       |
|---------------|
|               |              
|    Image      |          GLSurfaceView
|               |
|---------------|
|   black       |
|---------------|       <-
|               |
 ---------------
<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);
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);
}