Sobre imagens Android e tamanhos de recursos

86

Preciso esclarecer algumas dúvidas sobre os ativos de imagem do meu aplicativo,

se eu especificar em um arquivo xml que a altura de algo [visualização da imagem] é de 50 graus de altura

que tipo de tela devo escolher na pasta de recursos?

drawable, hdpi, ldpi, mdpi, xhdpi,

para ter a imagem de 50 px de altura,

e qual é a porcentagem para imagens maiores e menores em comparação com a imagem de base,

como no iOS, @ 2x, é literalmente 2 vezes o tamanho da imagem, e você diz programaticamente o tamanho normal,

obrigado!

manuelBetancurt
fonte
1
Sua pergunta é explicada no manual do Android: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski

Respostas:

373

mdpié a densidade de referência - ou seja, 1 px em uma mdpitela é igual a 1 mergulho. A proporção para o dimensionamento do ativo é:

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

Embora você realmente não precise se preocupar, a tvdpimenos que esteja desenvolvendo especificamente para o Google TV ou o Nexus 7 original - até mesmo o Google recomenda simplesmente usar hdpirecursos.

O que isso significa é que se você estiver fazendo uma imagem de 48dip e planeja suportar até xxhdpi resolution, você deve começar com uma imagem de 144px (192px se quiser ativos nativos para xxxhdpi) e fazer as seguintes imagens para as densidades:

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

E estes devem exibir em aproximadamente o mesmo tamanho em qualquer dispositivo, desde que você colocou estes em pastas específicas densidade (por exemplo drawable-xhdpi, drawable-hdpi, etc.)

Para referência, as densidades de pixel para estes são:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640
Kevin Coppock
fonte
32
Esta é a explicação mais fácil deste tópico que já vi online em qualquer lugar. Eu literalmente marquei isso na minha estação de trabalho de designers lol
James andresakis
10
Haha, ótimo! : P Acabei de adicionar informações para XXHDPI também.
Kevin Coppock
Como você decide que deve começar de um 48dip? Digamos que você tenha apenas um tablet (mdpi) em mãos, você começa com um tamanho aleatório e itera até que pareça "grande o suficiente"?
phtrivier
@phtrivier É apenas um tamanho que usei como exemplo. Neste caso, é do tamanho de um ícone de iniciador. O tamanho necessário para outros ativos depende do seu caso de uso.
Kevin Coppock
1
Eu também fiz uma ferramenta para calcular isso instantaneamente
wdavies973
22

Com base na resposta do kcoppock , criei o seguinte script de shell para redimensionar automaticamente todas as imagens para o tamanho correto e copiá-las nas respectivas pastas drawable- * - do Android!

Crie um script de shell e cole o seguinte código:

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

Coloque seu script em uma pasta e suas imagens originais em uma subpasta, por exemplo:

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

Execute o script de shell no terminal: sh createAndroidImages.sh

Para copiar as imagens criadas diretamente para o seu projeto Android Studio:

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

Você Terminou! Espero que isso ajude alguém!

PS Observe que as imagens originais devem ter pelo menos quatro vezes a largura em pixels, do que a largura desejada em dpi (por exemplo, 4 (fator xxxhdpi) * 30dpi => 120px) para resultados ideais.

electronix384128
fonte
4

kcoppock fez um ótimo trabalho ao explicar as densidades da tela do Andorid. Eu só gostaria de acrescentar mais um ponto a respeito da pergunta original.

O ícone do iniciador do Android Tablet usa um depósito de densidade.

De acordo com a postagem do desenvolvedor do Google Nick Butcher no Google+

A linda tela do Nexus 10 cai no balde de densidade XHDPI. Em tablets, o Launcher usa ícones de um intervalo de densidade até [0] para torná-los um pouco maiores. Para garantir que o ícone do iniciador (sem dúvida o ativo mais importante do seu aplicativo) seja nítido, você precisa adicionar um ícone 144 * 144px na pasta drawable-xxhdpi ou drawable-480dpi.

Encontre a fonte aqui

geng
fonte
1

Aqui estão meus cálculos para aumentar e diminuir as imagens para android-

ldpi (120 dpi, tela de baixa densidade) - 36px x 36px (0,19) (1)

mdpi (160 dpi, tela de densidade média) - 48px x 48px (0,25) (1,33)

hdpi (240 dpi, tela de alta densidade) - 72px x 72px (0,38) (2)

xhdpi (320 dpi, tela de densidade extra-alta) - 96px x 96px (0,5) (2,67)

xxhdpi (480 dpi, tela de densidade extra-extra-alta) - 144px x 144px (0,75) (4)

xxxhdpi (640 dpi, tela de densidade extra-extra-extra-alta) - 192px x 192px (1,0) (5,33)

Meu breve artigo é útil para criar recursos de imagem usando imagemagick, quando há várias imagens.

Sahu V Kumar
fonte