Динамическое использование RelativeLayout и настройка полей в пикселях, dp, дюймах, мм

Мое приложение представляет собой модифицированный ImageViewer с возможностью масштабирования и перетаскивания. Содержащий этот модифицированный Imageviewer есть RelativeLayout (который я хочу использовать как AbsoluteLayout).

Затем в макет могут быть добавлены новые элементы, чтобы разместить их в определенных точках изображения. Позиция (x, y) элементов в пикселях находится в базе данных, поэтому я полагаю, что нет другого способа добавить их программно, а не с помощью XML.

Затем положение этих элементов обновляется каждый раз, когда перетаскивание или выполняется действие масштабирования.

Проблема в том, что каким-то образом пиксели изображения не совпадают с пикселями в RelativeLayout! Таким образом, элементы расположены «более или менее», но не в нужном месте (чем дальше от (0,0), тем больше ошибка).

То, что я уже пробовал: float x = TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics ());

  • Попробуйте использовать в макете разные методы для установки полей:

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.leftMargin = (int) newPosition.x;
    params.topMargin = (int) newPosition.y;
    element.setLayoutParams (параметры);
    
  • Я также хотел использовать параметры, доступные для RelativeLayout в XML, но я действительно не могу найти его программно, но я могу найти способ указать размер, я имею в виду:

     android: layout_marginLeft = "50px" // или "50мм", или dp, или дюймы ...
    
  • 9
    задан AndyN 21 April 2014 в 11:00
    поделиться