Это не лучший способ добиться этого, но это решение ...
Создайте класс, который расширяет ваш родительский ViewGroup
, скажем RelativeLayout
или некоторые другие ViewGroup
s.
Найдите свой собственный вид в переопределении onFinishInflate()
.
Переопределите метод onLayout()
и вручную создайте собственный вид после вызова super.onLayout()
.
Наконец, каждый раз, когда вы хотите обновить местоположение вашего собственного вида, просто наберите requestLayout()
.
Вот пример ниже:
private AwesomeView mMyView;
private int mYourDesiredX;
private int mYourDesiredY;
@Override
public void onFinishInflate() {
super.onFinishInflate();
if (mMyView == null) {
mMyView = (AwesomeView)findViewById();
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
mMyView.layout(mYourDesiredX,
mYourDesiredY,
mYourDesiredX + mMyView.getWidth(),
mYourDesiredY + mMyView.getHeight());
}
Но это не эффективное решение.
Если вы создаете игры, попробуйте SurfaceView
или даже GLSurfaceView
и нарисуйте объекты самостоятельно с помощью Canvas
.