Android görüntüsü ve varlık boyutları hakkında


86

Uygulamamın görsel varlıkları hakkındaki bazı şüpheleri netleştirmem gerekiyor,

Bir xml dosyasında bir şeyin yüksekliğinin [image view] 50 dip yüksekliği olduğunu belirtirsem

kaynaklar klasöründen hangi ekran türünü seçmeliyim?

drawable, hdpi, ldpi, mdpi, xhdpi,

50 piksel yüksekliğindeki resme sahip olmak,

ve temel görüntüye kıyasla daha büyük, daha küçük boyutlu görüntülerin yüzdesi nedir?

iOS'ta olduğu gibi, @ 2x, görüntünün tam anlamıyla 2 katı büyüklüğünde ve programlı olarak normal boyut diyorsunuz,

Teşekkürler!


1
Sorunuz Android'in kılavuzunda açıklanmıştır: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski

Yanıtlar:


373

mdpireferans yoğunluğudur - yani, bir mdpiekrandaki 1 piksel, 1 dalmaya eşittir. Varlık ölçekleme oranı:

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

tvdpiÖzellikle Google TV veya orijinal Nexus 7 için geliştirme yapmadığınız sürece gerçekten endişelenmenize gerek olmasa da, Google bile yalnızca öğeleri kullanmanızı önerir hdpi.

Bunun anlamı şudur: 48dip görüntü yapıyorsanız ve bunu desteklemeyi planlıyorsanız xxhdpi resolution, 144 piksellik bir görüntü ile başlamalısınız (xxxhdpi için yerel varlıklar istiyorsanız 192 piksel) ve yoğunluklar için aşağıdaki görüntüleri yapmalısınız:

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

Yoğunluğa özgü klasörlere (ör drawable-xhdpi. drawable-hdpi, Vb.)

Referans için, bunlar için piksel yoğunlukları:

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

32
Bu, her yerde çevrimiçi olarak gördüğüm bu konunun en kolay açıklaması. Tam anlamıyla benim tasarımcılar iş istasyonu lol üzerinde işaretlenmiş rezervasyonlarını
James andresakis

10
Haha, harika! : P XXHDPI için de bilgi eklendi.
Kevin Coppock

48 dipten başlamanız gerektiğine nasıl karar veriyorsunuz? Elinizde yalnızca bir tabletiniz (mdpi) olduğunu varsayalım, rastgele bir boyutla başlayıp "yeterince büyük" görünene kadar yineleyerek mi çalışıyorsunuz?
phtrivier

@phtrivier Örnek olarak kullandığım bir boyut. Bu durumda, bir başlatıcı simgesinin boyutundadır. Diğer varlıklar için ihtiyacınız olan boyut ne olursa olsun, kullanım durumunuza bağlıdır.
Kevin Coppock

1
Ayrıca bunu anında hesaplamak için bir araç yaptım: pixit-tool.web.app/#
wdavies973

22

Kcoppock'un cevabına dayanarak, tüm resimleri otomatik olarak doğru boyuta yeniden boyutlandırmak ve bunları ilgili Android çizilebilir - * - klasörlerine kopyalamak için aşağıdaki kabuk komut dosyasını oluşturdum!

Bir kabuk komut dosyası oluşturun ve aşağıdaki kodu yapıştırın:

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/*

Komut dosyanızı bir klasöre ve orijinal görüntülerinizi bir alt klasöre koyun, örneğin:

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

Kabuk betiğini terminalde çalıştırın: sh createAndroidImages.sh

Oluşturulan görüntüleri doğrudan Android Studio Projenize kopyalamak için:

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

Sen bittin! Umarım bu birine yardımcı olur!

PS En iyi sonuçlar için orijinal görüntülerin piksel cinsinden en az dört katı genişliğe sahip olması gerektiğini, dpi cinsinden istenen genişlikten (örn. 4 (faktör xxxhdpi) * 30dpi => 120px) olması gerektiğini lütfen unutmayın.


4

kcoppock, Andorid ekran yoğunluklarını açıklamak için harika bir iş çıkardı. Orijinal soru ile ilgili bir noktayı daha eklemek istiyorum.

Android Tablet başlatıcı simgesi, bir yoğunluk kovası kullanır.

Google'ın geliştiricisi Nick Butcher'in Google+ gönderisine göre

Nexus 10'daki muhteşem ekran, XHDPI yoğunluk kovasına düşüyor. Tabletlerde Launcher, onları biraz daha büyük hale getirmek için bir yoğunluk kümesindeki [0] simgeleri kullanır. Başlatıcı simgenizin (muhtemelen uygulamalarınızın en önemli varlığı) net olduğundan emin olmak için, çekilebilir xxhdpi veya drawable-480dpi klasörüne 144 * 144 piksellik bir simge eklemeniz gerekir.

Kaynağı burada bulun


1

İşte android için görüntülerin büyütülmesi ve küçültülmesi için hesaplamalarım:

ldpi (120 dpi, Düşük yoğunluklu ekran) - 36px x 36px (0.19) (1)

mdpi (160 dpi, Orta yoğunluklu ekran) - 48px x 48px (0.25) (1.33)

hdpi (240 dpi, Yüksek yoğunluklu ekran) - 72px x 72px (0.38) (2)

xhdpi (320 dpi, Ekstra yüksek yoğunluklu ekran) - 96px x 96px (0.5) (2.67)

xxhdpi (480 dpi, Ekstra ekstra yüksek yoğunluklu ekran) - 144px x 144px (0.75) (4)

xxxhdpi (640 dpi, Ekstra ekstra ekstra yüksek yoğunluklu ekran) - 192px x 192px (1.0) (5.33)

Kısa makalem, birden fazla görüntü olduğunda imagemagick kullanarak görüntü kaynakları oluşturmak için yararlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.