Чи використовує setWidth (int pixels) незалежний від пристрою піксель або фізичний піксель як одиницю? Наприклад, чи встановлює setWidth (100) ширину подання до 100 занурень або 100 пікселів?
Дякую.
Чи використовує setWidth (int pixels) незалежний від пристрою піксель або фізичний піксель як одиницю? Наприклад, чи встановлює setWidth (100) ширину подання до 100 занурень або 100 пікселів?
Дякую.
Відповіді:
Він використовує пікселі, але я впевнений, що вам цікаво, як замість цього використовувати падіння. Відповідь у TypedValue.applyDimension()
. Ось приклад того, як перетворити dips у px у коді:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
Правильним способом отримання постійної кількості DIP-кодів у коді є створення XML-файлу ресурсів, що містить значення dp трохи як:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
Потім зверніться до ресурсу у своєму коді так:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
Повернутий плаваючий код буде масштабовано відповідно до щільності пікселів пристрою, тому вам не потрібно продовжувати тиражувати метод перетворення у всій програмі.
Метод setWidth (100), встановіть 100 px як ширину (не в dp). Тому ви можете зіткнутися з різними проблемами ширини на різних телефонах Android. Тому використовуйте вимірювання в dp замість пікселів. Використовуйте код нижче, щоб отримати вимірювання в dp ширини зразка = 300 пікс. Та висота = 400 пікс.
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;
Звичайно, пікселі, метод запитує пікселі як параметр.
На основі наведених вище відповідей, які мені добре підходять, я створюю кілька допоміжних методів , просто додаю їх у свої утиліти, щоб використовувати їх у цілому проекті.
// 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());
}