How to get the middle of the screen for API>=19

78 Views Asked by At

The button should move to the middle of the screen when clicked. But every time I get different position of button in different devices. And I don't know how can I fix it. This code what I use:

 DisplayMetrics metrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
                float middleScreen = metrics.xdpi;
final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
                animation.setDuration(3000);
                animation.setFillAfter(true);
 buttonToNextView.setAnimation(animation);
1

There are 1 best solutions below

1
aminography On BEST ANSWER

First of all, what DisplayMetrics.xdpi gave us is the exact physical pixels per inch of the screen in the X dimension which is not the number of pixels on the x-axis.

So, we should use half of widthPixels and heightPixels (based on screen orientation) to achieve the middle of the screen on the x-axis.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);

boolean isDisplayPortrait = getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
float middleScreen = isDisplayPortrait ? metrics.widthPixels / 2 : metrics.heightPixels / 2;

final TranslateAnimation animation = new TranslateAnimation(0, -middleScreen, 0, 0);
animation.setDuration(3000);
animation.setFillAfter(true);
buttonToNextView.setAnimation(animation);

Notice that to place the button exactly at the middle of the screen, you need to subtract half of its width from the middleScreen value.