I have a problem with placing my views (my class extends View
) in a specific location.
I have designed a game that treats the screen as a net of grids. I get from the user x and y coordinates of a specific view (I have different types of views).
My first mission is to set the correct view in its place. How can I do it?
I am using RelativeLayout
for the screen.
P.S. I don't want to use AbsoluteLayout
params because it was truncated.
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
.