Вы можете сделать что-то вроде этого:
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width_physical_pixels, height_physical_pixels);
imageView.setLayoutParams(layoutParams);
Но в параметрах требуется пиксель, поэтому вам придется использовать формулу для преобразования пикселей в dp, например, вы можете использовать это для преобразования :
float scale = getBaseContext().getResources().getDisplayMetrics().density;
px = dp_that_you_want * (scale / 160);
Собираем все воедино:
//Get screen density to use in the formula.
float scale = getBaseContext().getResources().getDisplayMetrics().density;
px = dp_that_you_want * (scale / 160);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(px, px);
imageView.setLayoutParams(layoutParams);
Я не знаю, если это то, что вы ищете, или это сработает, поэтому дайте мне знать, если это так ,
Я сделал это путем создания настраиваемого менеджера по расположению. Каждый компонент (или, скорее, класс компонента) в кадре имеет маркер независимо от того, должен ли он изменяться в размере при изменении размера контейнера (например, размер таблиц изменяется, а кнопки - нет). Те, размер которых не изменен, перемещаются при изменении размера контейнера.
Если я смотрю на эту проблему как на визуальный редактор UML, то мне приходилось думать об одном компоненте «холста», рисующем каждый элемент как графический объект с базовым соотношением сторон и увеличением / уменьшением. Я не вижу причин для выравнивания списка компонентов в родительском контейнере.
Вот почему существуют менеджеры компоновки: они сообщают содержащимся компонентам, где и насколько они должны быть большими.
Поскольку вы говорите о редакторе UML, используете ли вы содержащиеся компоненты Swing для представления различные объекты на диаграмме (например, компонент класса)? Если да, то у вас впереди много работы (хотя это не обязательно плохой подход). Я бы рекомендовал создать объект ограничений, который определяет местоположение объекта в «единичном пространстве», а затем умножить его на текущий размер.
Я начал аналогичное решение, которое отлично работает, не затрагивая исходный макет.
Это так просто:
// Install scalable layout and CTRL+/CTRL- keys for scaling operations
ScalableLayoutUtils.installScalableLayoutAndKeys(new DefaultScalableLayoutRegistry(), frame, 0.1);
Оно все еще находится в разработке, но скоро будет доступно как часть следующая версия "utils4swing".