这个问题可能看起来微不足道并且被问过很多次,但我找不到适合我的答案。
当我按下按钮时,我有一个 ImageView
和 GLSurfaceView
绘制在 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 |
|---------------| <-
| |
---------------
我的 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。
关于android - 如何在android中获取显示图像的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27413686/