DWOME
DWOME

Reputation: 109

Get on Screen Position of Objects in OnCreate()

I am facing following problem: I got 4 Buttons over the screen, which can be dragged and move back to their original position when dropping the button.

To do so I want to read out the specific position of the button (on the specific device) by using the getX() and getY() function and writing the results into an array.

buttons[0][0] = button.getX();
buttons[0][1] = button.getY();

As I cannot use these functions in the onCreate or in the onStart (the position is always (0,0) cause the view is not instantiated yet I am thinking about how to read out the original position without any extra coding.

Thanks a lot

Upvotes: 2

Views: 421

Answers (2)

hair raisin
hair raisin

Reputation: 2628

not sure what you mean by "extra coding" but you could use an OnTouchListener (or modify the one you're already using, if that's the case) to capture the position as soon as they touch the button, but before they drag it anywhere (I think that would be ACTION_DOWN).

This has the advantage of only being set when you need it to, skipping it when they don't actually drag the buttons, and not calling it for every layout pass, etc.

Upvotes: 1

i_am_jorf
i_am_jorf

Reputation: 54600

In your onCreate—though onResume may make more sense—get a reference to a view that is an ancestor of all the buttons (or just the root of the activity, which may be easiest) and then do this:

rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  @Override
  public void onGlobalLayout() {
    rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

    // Read values here.
    buttons[0][0] = button.getX();
    buttons[0][1] = button.getY();
  }
});

Upvotes: 2

Related Questions