SetWidth (int pixels) usa pixel independente de dispositivo ou pixel físico como unidade? Por exemplo, setWidth (100) define a largura de uma visualização como 100 inclinações ou 100 pxs?
Obrigado.
SetWidth (int pixels) usa pixel independente de dispositivo ou pixel físico como unidade? Por exemplo, setWidth (100) define a largura de uma visualização como 100 inclinações ou 100 pxs?
Obrigado.
Respostas:
Ele usa pixels, mas tenho certeza de que você está se perguntando como usar mergulhos. A resposta está em TypedValue.applyDimension()
. Aqui está um exemplo de como converter quedas em px no código:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
A maneira correta de obter um número constante de DIPs no código é criar um arquivo XML de recursos contendo valores dp um pouco como:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
Em seguida, consulte o recurso em seu código da seguinte maneira:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
O float que você retornou será dimensionado de acordo com a densidade de pixels do dispositivo e, portanto, você não precisa ficar replicando um método de conversão em todo o seu aplicativo.
Método setWidth (100), defina 100 px como largura (não em dp). Portanto, você pode enfrentar problemas de largura em diferentes telefones Android. Portanto, use a medição em dp em vez de pixels. Use o código abaixo para obter a medição em dp da largura da amostra = 300px e altura = 400px.
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
Pixels é claro, o método pede pixels como parâmetro.
Com base nas respostas acima que funcionam bem para mim, eu gerei alguns métodos auxiliares , basta adicioná-los em seus utils para usá-los em todo o projeto.
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}