This is not the best way to achieve it, but it's a solution...
Create a class that extends your parent ViewGroup
, say RelativeLayout
or some other ViewGroup
s.
Find your own view in overriding onFinishInflate()
.
Override the onLayout()
method and manually layout your own view after calling super.onLayout()
.
Finally, every time you want to refresh the location of your own view, just call requestLayout()
.
Here is a sample below:
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());
}
But this is not an efficient solution.
If you are making games, try SurfaceView
or even GLSurfaceView
and draw the objects by your own with Canvas
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…