2016-11-15 1 views
0

Как получить максимальную ширину и максимальные высоты для ImageView В соответствии с плотностью устройства и размером экрана в AndroidКак получить максимальную ширину и максимальные высоты для ImageView В соответствии с плотностью устройства и размером экрана в Android

я используя этот код

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    try { 
     Drawable drawable = getDrawable(); 

     if (drawable == null) { 
      setMeasuredDimension(0, 0); 
     } else { 
      int width = (MeasureSpec.getSize(widthMeasureSpec))/4; 
      int height = (width * drawable.getIntrinsicHeight()/drawable.getIntrinsicWidth()); 
      setMeasuredDimension(width, height); 
     } 
    } catch (Exception e) { 
     isMeasured = false; 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

ответ

0

Возможно, вы неправильно поняли, как работают макеты Android. В основном представления получают размер своих родителей. onMeasure позволяет виду влиять на размер, но должен следовать контракту метода.

В частности, ваше onMeasure не учитывает режим измерения (как горизонтальный, так и вертикальный). Вы должны обеспечить измерение для всех девяти возможных состояний:

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

гориза точно, вертикальный в большинстве : установить размер по горизонтали для заданного значения, вертикально установить значение , что не больше заданного значения (растяжения с соотношением сторон может сделать это меньший)

гориз точно, вертикальный неопределенный : установить размер по горизонтали приведенного, установить вертикальный размер на лучшие соответствующий размер (например, поддержание соотношения сторон)

гориза самых больший, вертикальное точно : установить вертикальный размер до заданного размера. Установите горизонтальный размер в , соответствующий размер, который не превышает заданный горизонтальный размер.

максимум не более, вертикальное не более : Найдите, какое измерение ограничивает изображение в соответствии с соотношением сторон. Treat, что измерение, как если бы оно было дано в точности (но если изображение меньше, чем пределы можно также использовать, что вместо)

гориз самое большее, вертикальный энное : Если горизонтальный размер меньше, чем образ обрабатывает его так, как если бы размер был задан для точного горизонтального размера, в противном случае рассматривайте его как , если горизонтальное ограничение было точным.

гориз неопределенный, вертикальный точные : Как гориз точный, вертикальный неопределенные, но гориз и вертикальные места

гориза неопределенный, вертикальный, самые большее : Как гориз самых больший, по вертикали не определен, но гориз и вертикальные места

гориза неопределенный, вертикальный неопределенные : характеристическая размер изображения или некоторые по умолчанию, если изображение не (по умолчанию используется 100 100), используя 0,0 делает редактор макета неудобным.

КПП.Не поймайте Исключение, то есть poor practice.

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