[英]how to set final size(50dp) for an imageView so that it looks same size on any android device screen
嗨,我有一个包含应用程序图标的可绘制对象。应用程序图标在runtime
过程中存储在可绘制对象中,然后使用ImageView
设置该可绘制对象。 但是,根据设备上我的应用程序running.I已设定的宽度和高度的应用程序图标的大小变化imageView
在XML作为50dp和也用这种代码:
image.setAdjustViewBounds(true);
image.setMaxHeight(50);
image.setMaxWidth(50);
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
但事与愿违worked.So我怎么可以设置为我的最终大小(50dp) imageView
,这样它可以在任何Android设备屏幕上相同尺寸的出现。
在xml
文件中设置宽度和高度就足够了。 您无需以编程方式进行设置。
如果您这样设置宽度和高度
image.setMaxHeight(50);
image.setMaxWidth(50);
值50以像素为单位,而不是dp。 由于设备的dpi不同,尺寸为50x50像素的图像在不同的设备中看起来会有所不同。
项目中有文件夹mdpi,hdpi,xhpdi和xxhdpi。 如果要以50dp显示图像,则必须生成其他文件:
这是因为mdpi 1 px = 1 dp,hdpi 1dp = 1.5 px,xhdpi 1dp = 2px和xxhdpi 1dp = 3px
更新您只可以生成一张大小为150x150像素的图像,并将其放在文件夹xxhdpi中。 应用程序将自动缩放图像以适合其他密度。
通过做
image.setMaxHeight(50);
image.setMaxWidth(50);
您正在以pixels
设置width
和height
。 对于不同的设备,随着重新溶解度的变化,外观将不一样,因此您需要将这些值设置为与density independent pixels(dp)
。 使用以下方法根据设备density
将单位从dp
转换为pixels
。
public final class DimensionUtils {
private static boolean isInitialised = false;
private static float pixelsPerOneDp;
// Suppress default constructor for noninstantiability.
private DimensionUtils() {
throw new AssertionError();
}
private static void initialise(View view) {
pixelsPerOneDp = view.getResources().getDisplayMetrics().densityDpi / 160f;
isInitialised = true;
}
public static float pxToDp(View view, float px) {
if (!isInitialised) {
initialise(view);
}
return px / pixelsPerOneDp;
}
public static float dpToPx(View view, float dp) {
if (!isInitialised) {
initialise(view);
}
return dp * pixelsPerOneDp;
}
}
您可以使用TypedValue
根据提供的dp
获取px
值:
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DP, 50, getResources().getDisplayMetrics());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.