繁体   English   中英

如何为imageView设置最终大小(50dp),以便在任何android设备屏幕上看起来都一样大小

[英]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中的图片尺寸50x50 px(像素)
  • 文件夹hdpi中的图片尺寸为75x75像素
  • xhdpi文件夹中的图像尺寸100x100 px
  • 文件夹xxhdpi中的图像尺寸150x150像素

这是因为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设置widthheight 对于不同的设备,随着重新溶解度的变化,外观将不一样,因此您需要将这些值设置为与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM