2016-04-26 22 views
0

У меня проблема с приложением здесь, связанным с этой проблемой. Посмотрите, можете ли вы мне помочь:Плотность пикселей в пикселях и Android для изображения с фиксированным размером

В моем случае у меня есть ImageView, показывающий линейку, а затем мне нужно показать это правило в реальном размере, где ему не нужно расти или уменьшаться по размеру или плотности экрана. Используя в качестве основы мой Moto G3, он отлично работает, но при использовании других устройств testo он теряет фактический размер линейки, потому что изображение пытается соответствовать размеру экрана.

Изображение линейки находится в PNG и измеряет 3600px x 155px и измеряется до 30 см, оно находится в пределах LinearLayout по горизонтали. В моей видимой области Moto G3 она находится на 10 см, на большом экране, например, она должна показывать большую область линейки (например, от 11 до 15 см), но она отображает только 10 см в поле зрения экрана, показывая, что он растет и сжимается как настройки дисплея и плотность устройства.

Перед тем, как я получил изображение RAGUA для каждого ресурса (xxhdpi, xhdpi и т. Д.), Я решил перенести его в папку с ресурсами Android, но все еще с той же проблемой.

У вас есть свет, как его исправить?

Следит код:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <HorizontalScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     <ImageView 
      android:id="@+id/rulerPolegada" 
      android:layout_width="1780dp" 
      android:layout_height="103dp" 
      android:layout_marginTop="-10dp" 
      android:layout_marginLeft="@dimen/left_ruler" 
      /> 
     </RelativeLayout> 
     </HorizontalScrollView> 
    </LinearLayout> 

И как я уже говорил, после I изображений для активов, я начал, чтобы установить его в Java:

rulerPolegada = (ImageView) view.findViewById(R.id.rulerPolegada); 
     rulerPolegada.setImageDrawable(Controller.getImageAssets(getActivity(), "ruler_polegada.png")); 

ответ

1

Из-за Understanding Density Independence In Android вы можете рассчитать эти значения следующим образом:

this table

Вот как можно рассчитать для вашего устройства (Moto G3)

  1. 30см = 11,811 в
  2. Moto G3 экран ведро плотность xhdpi - 320dpi
  3. 320px ~ = 1 в
  4. 320px * 11.811in ~ = 3780px

С этим шаги вы можете рассчитать, как большой ваш чат возраст должен быть.

Теперь, вместо того, чтобы обеспечивать изображения различного правителя для различных плотностей экрана, поместите изображение высокого качества в папке вытяжки-anydpi, потому что A drawable in res/drawable-anydpi/ also is valid for any screen density. However, in this case, the -anydpi variant trumps any density-specific variant. благодаря '-nodpi, -anydpi, and WTF?' article from The CommonsBlog

Unfortunatelly, вы можете не используются расчетные значения в расположении XML-файле напрямую - размер ImageView должен динамически изменяться в Java-коде.

Выше решение должно дать вам приличный точ- (это может быть diffent на 10%), но вы можете использовать DensityMetrics вместе с дисплеем по умолчанию, чтобы получить фактическую горизонтальную и вертикальную плотность, которая поможет вам рассчитать изображения размер пикселя более точно ,

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 

// these will return the actual dpi horizontally and vertically 
float xDpi = dm.xdpi; 
float yDpi = dm.ydpi; 

Редактировать

Расчет для 480dp:

  1. 30см = 11,811 в
  2. плотность ковша xxhdpi - 480dp
  3. 480px ~ = 1в
  4. 480px * 11.811in ~ = 5669px
+0

Хорошо, смотрите: на этот раз мое приложение имеет следующие данные, e работает хорошо в Moto G3, с плотностью 320: Изображение PNG: 3591px - 153px ImageView: layout_width: 1780dp; layout_height: 153dp; Каким будет расчет для устройства с плотностью 480 точек на дюйм? –

+0

@ PauloLinhares-Packapps Я добавил расчет для 480dp в нижней части ответа –

+0

Прошу прощения, я имел в виду 320 и другие, чем 480. Мне не были понятны эти параметры расчетов. –

0

Вы должны прочитать эту guide для запуска в мультиэкранном

+0

Другу, мне нужно сделать изображение с фиксированным размером, идентичным размеру объекта в реальном мире, например, линейкой. Он не может изменять размер на разных устройствах. То есть, андроид поддержки не может расти или сокращаться в соответствии с экраном или ее плотностью. Понял? –

0

Я не уверен, правильно ли вы получили ответы, потому что кажется, что предыдущие ответы не были удовлетворены. У меня была одна и та же проблема - мне нужно это ImageView, чтобы иметь тот же размер на множестве устройств без масштабирования. Я решил свою проблему, предоставив определенное значение в dp для layout_width и layout_height

 Смежные вопросы

  • Нет связанных вопросов^_^