簡體   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