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!


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

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.


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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.