Android - использование view.setX() и setY в api 8

Я работаю над android api8. Я хочу динамически позиционировать/разместить изображение на экране. но для использования setX и setY нам нужен уровень API 11 и выше. как мы можем использовать его в API 8 или есть ли альтернатива для этого? нужна помощь

Ответы

Ответ 1

Вы можете сделать это, используя LayoutParams. Они могут быть добавлены к компонентам интерфейса android, чтобы установить их границы и положение.

Пример (установка LayoutParams в дочернем представлении RelativeLayout)

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //The WRAP_CONTENT parameters can be replaced by an absolute width and height or the FILL_PARENT option)
params.leftMargin = 50; //Your X coordinate
params.topMargin = 60; //Your Y coordinate
childView.setLayoutParams(params);

Обратите внимание, что тип LayoutParams должен быть равен родительскому элементу childview, к которому вы хотите добавить. (LinearLayout.LayoutParams для a LinearLayout, RelativeLayout.LayoutParams для a RelativeLayout и т.д.).

Кроме того, вместо childView.setLayoutParams(params); вы также можете использовать parentView.addView(childView,params); для установки Layoutparams, когда элемент добавляется в родительский контейнер.

ПРИМЕЧАНИЕ! Значения для координат находятся в пикселях. Поскольку лучше использовать значения DP для определения размеров вашего интерфейса, вы можете использовать этот кусок кода для преобразования dp в пиксели:

private int getPixels(int dipValue){ 
     Resources r = getResources();
     int px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue,   r.getDisplayMetrics());
     return px; 
}

Ответ 2

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

params.rightMargin=currentRightMargin -yourX;
params.bottomMargin=currentBottomMargin -yourY;

чтобы избежать искажений внутри внутреннего вида просмотра

Ответ 3

Вы можете использовать http://nineoldandroids.com/ и иметь поддержку API с уровня 1 следующим образом:

ViewPropertyAnimator.animate(view).translationYBy(-yourY).setDuration(0);