Androidの画像とアセットのサイズについて


86

アプリの画像アセットに関する疑問を明確にする必要があります。

xmlファイルで何か[画像ビュー]の高さが50ディップの高さであると指定した場合

リソースフォルダからどのタイプの画面を選択する必要がありますか?

drawable, hdpi, ldpi, mdpi, xhdpi,

高さ50ピクセルの画像を作成するには、

ベース画像と比較した、より大きな、より小さなサイズの画像のパーセンテージはどれくらいですか?

iOSのように、@ 2xは文字通り画像の2倍のサイズであり、プログラムで通常のサイズと言います。

ありがとう!


1
あなたの質問はAndroidのマニュアルで説明されています:developer.android.com/guide/practices/screens_support.html
Marcin Orlowski 2012

回答:


373

mdpiは参照密度です。つまり、mdpiディスプレイの1ピクセルは1ディップに相当します。資産スケーリングの比率は次のとおりです。

ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1    | 1.33  | 1.5  | 2     | 3      | 4

tvdpiGoogleTVまたはオリジナルのNexus7専用に開発しているのでない限り、心配する必要はありませんが、Googleでさえhdpiアセットを使用することをお勧めします。

これが意味するのは、48dipイメージを実行していてxxhdpi resolution、最大をサポートする予定の場合、144pxイメージ(xxxhdpiのネイティブアセットが必要な場合は192px)から始めて、密度用に次のイメージを作成する必要があります。

ldpi    | mdpi    | tvdpi    | hdpi    | xhdpi     | xxhdpi    | xxxhdpi
36 x 36 | 48 x 48 | 64 x 64  | 72 x 72 | 96 x 96   | 144 x 144 | 192 x 192

そして、これらは任意のデバイス上のほぼ同じサイズで表示されるはずです、あなたは(例えば密度、特定のフォルダにこれらを配置した提供drawable-xhdpidrawable-hdpiなど、)

参考までに、これらのピクセル密度は次のとおりです。

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640

32
これは私がどこでもオンラインで見たこのトピックの最も簡単な説明です。私は文字通り私のデザイナーのワークステーションでそれをマークしました笑
James andresakis 2013

10
ハハ、すごい!:PXXHDPIの情報も追加しました。
ケビンコポック2013

48dipから始めなければならないことをどのように決定しますか?手元にタブレット(mdpi)しかない場合、ランダムなサイズから始めて、「十分な大きさ」に見えるまで繰り返しますか?
phtrivier 2015年

@phtrivierこれは私が例として使用したサイズです。この場合、それはランチャーアイコンのサイズです。他のアセットに必要なサイズは、ユースケースによって異なります。
ケビンコポック2015年

1
:私もその場でこれを計算するためのツール作っpixit-tool.web.app/#
wdavies973

22

kcoppockの回答に基づいて、次のシェルスクリプトを作成し、すべての画像のサイズを自動的に正しいサイズに変更して、それぞれのAndroidドローアブル-*-フォルダーにコピーしました。

シェルスクリプトを作成し、次のコードを貼り付けます。

createAndroidImages.sh

#!/bin/bash

read -p "Please enter the subfolder of the original images? " folder
read -p "How many DP (width) should the image have? " dp

for i in $(find $folder/. -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

mkdir drawable-ldpi
mkdir drawable-mdpi
mkdir drawable-tvdpi
mkdir drawable-hdpi
mkdir drawable-xhdpi
mkdir drawable-xxhdpi
mkdir drawable-xxxhdpi

cp $folder/* drawable-ldpi/
cp $folder/* drawable-mdpi/
cp $folder/* drawable-tvdpi/
cp $folder/* drawable-hdpi/
cp $folder/* drawable-xhdpi/
cp $folder/* drawable-xxhdpi/
cp $folder/* drawable-xxxhdpi/

sips -Z $(echo $dp*3/4 | bc) drawable-ldpi/*
sips -Z $(echo $dp | bc) drawable-mdpi/*
sips -Z $(echo $dp*4/3 | bc) drawable-tvdpi/*
sips -Z $(echo $dp*3/2 | bc) drawable-hdpi/*
sips -Z $(echo $dp*2 | bc) drawable-xhdpi/*
sips -Z $(echo $dp*3 | bc) drawable-xxhdpi/*
sips -Z $(echo $dp*4 | bc) drawable-xxxhdpi/*

スクリプトをフォルダーに入れ、元の画像をサブフォルダーに入れます。例:

/
.. createAndroidImages.sh
.. originalImages/
....a123.png
....b456.png

ターミナルでシェルスクリプトを実行します。 sh createAndroidImages.sh

作成した画像をAndroidStudioプロジェクトに直接コピーするには:

cp -R drawable-* ~/AndroidStudioProjects/ESCRating/app/src/main/res/

完了です。これが誰かを助けることを願っています!

PS最適な結果を得るには、元の画像の幅がピクセル単位の幅の少なくとも4倍である必要があります(例:4(係数xxxhdpi)* 30dpi => 120px)。


4

kcoppockは、Andoridの画面密度を説明する素晴らしい仕事をしました。元の質問に関してもう1つポイントを追加したいと思います。

Androidタブレットランチャーアイコンは、1つの密度バケットを使用します。

Googleの開発者NickButcherのGoogle+投稿によると

Nexus 10のゴージャスな画面は、XHDPI密度バケットに分類されます。タブレットでは、Launcherは1つの密度バケットから[0]までのアイコンを使用して、アイコンを少し大きくします。ランチャーアイコン(おそらくアプリの最も重要なアセット)を鮮明にするには、drawable-xxhdpiまたはdrawable-480dpiフォルダーに144 * 144pxのアイコンを追加する必要があります。

ここでソースを見つける


1

これがAndroid用の画像のアップスケーリングとスケールダウンの計算です-

ldpi(120 dpi、低密度画面)-36px x 36px (0.19)(1)

mdpi(160 dpi、中密度画面)-48px x 48px (0.25)(1.33)

hdpi(240 dpi、高密度画面)-72px x 72px (0.38)(2)

xhdpi(320 dpi、超高密度画面)-96px x 96px (0.5)(2.67)

xxhdpi(480 dpi、超高密度画面)-144px x 144px (0.75)(4)

xxxhdpi(640 dpi、超超超高密度画面)-192px x 192px (1.0)(5.33)

私の短い記事は、複数の画像がある場合にimagemagickを使用して画像リソースを作成するのに役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.