Android Studio ImageView 仅更改宽度并保持纵横比
Android Studio ImageView Change Only Width and Maintain Aspect Ratio
我有一个像这样的图像视图:
<ImageView
android:id="@+id/add_image_signup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/other_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
app:srcCompat="@drawable/add_button" />
我正在尝试使用布局参数以编程方式(基于设备大小)进行缩放。这样的东西效果很好:
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val height = displayMetrics.heightPixels
val width = displayMetrics.widthPixels
val addImage = findViewById<ImageView>(R.id.add_image_signup)
val layoutParams = addImage.getLayoutParams()
layoutParams.width = width * 0.3
layoutParams.height = height * 0.1
addImage.setLayoutParams(layoutParams)
并对图像进行缩放。但是,我只想缩放 宽度,并相应地缩放高度,以便图像保持其纵横比。
我试过只缩放宽度,像这样:
val addImage = findViewById<ImageView>(R.id.add_image_signup)
val layoutParams = addImage.getLayoutParams()
layoutParams.width = width * 0.3
addImage.setLayoutParams(layoutParams)
但这似乎没有效果。
有没有办法只指定宽度值,并相应地设置高度比例,以便图像保持其纵横比?
谢谢
在XML文件中添加固定宽度,保持高度为wrap_content,看看。我认为您不需要以编程方式扩展它。
将设置的宽度除以纵横比得到高度,然后像下面的代码一样设置
Display display = requireActivity().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
Resources r = getResources();
float density = getResources().getDisplayMetrics().density;
//float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
int widthPX = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, yourImageFixedWidthValue, r.getDisplayMetrics()));
float imageAspectRatio = (float) 335 / 217;
float imageWidth = widthPX;
float imageHeight = imageWidth / imageAspectRatio;
imageView.getLayoutParams().height = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, imageHeight, r.getDisplayMetrics()));
imageView.setAdjustViewBounds(true);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
我有一个像这样的图像视图:
<ImageView
android:id="@+id/add_image_signup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/other_text"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
app:srcCompat="@drawable/add_button" />
我正在尝试使用布局参数以编程方式(基于设备大小)进行缩放。这样的东西效果很好:
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val height = displayMetrics.heightPixels
val width = displayMetrics.widthPixels
val addImage = findViewById<ImageView>(R.id.add_image_signup)
val layoutParams = addImage.getLayoutParams()
layoutParams.width = width * 0.3
layoutParams.height = height * 0.1
addImage.setLayoutParams(layoutParams)
并对图像进行缩放。但是,我只想缩放 宽度,并相应地缩放高度,以便图像保持其纵横比。
我试过只缩放宽度,像这样:
val addImage = findViewById<ImageView>(R.id.add_image_signup)
val layoutParams = addImage.getLayoutParams()
layoutParams.width = width * 0.3
addImage.setLayoutParams(layoutParams)
但这似乎没有效果。
有没有办法只指定宽度值,并相应地设置高度比例,以便图像保持其纵横比?
谢谢
在XML文件中添加固定宽度,保持高度为wrap_content,看看。我认为您不需要以编程方式扩展它。
将设置的宽度除以纵横比得到高度,然后像下面的代码一样设置
Display display = requireActivity().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
Resources r = getResources();
float density = getResources().getDisplayMetrics().density;
//float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
int widthPX = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, yourImageFixedWidthValue, r.getDisplayMetrics()));
float imageAspectRatio = (float) 335 / 217;
float imageWidth = widthPX;
float imageHeight = imageWidth / imageAspectRatio;
imageView.getLayoutParams().height = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, imageHeight, r.getDisplayMetrics()));
imageView.setAdjustViewBounds(true);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);