java - API>=19 如何获取屏幕中间

标签 java android android-animation android-screen

单击时按钮应移动到屏幕中间。但是每次我在不同的设备上得到不同的按钮位置。而且我不知道该如何解决。 我使用的这段代码:

 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);

最佳答案

首先,DisplayMetrics.xdpi 给我们的是 X 维度上屏幕每英寸的精确物理像素,这不是屏幕上的像素数x 轴。

所以,我们应该使用一半的widthPixelsheightPixels(基于屏幕方向)来实现屏幕在x轴上的中间。

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);

请注意,要将按钮恰好放在屏幕中间,您需要从 middleScreen 值中减去其宽度的一半。

关于java - API>=19 如何获取屏幕中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64012566/

相关文章:

Java 计时器问题可能涉及将它们存储在列表中

java - 登录 Facebook registerCallback 未调用

android - 连接到已配对的蓝牙设备

android动画添加Easings效果

java - 如何将一个对象传递给一个类,以便当对象在类外更新时,它在类内也会过时? ( java )

java - Swing 计时器仅在最后一个事件上运行

java - (如何)是否可以捕获 Java 三元运算符语句中的异常?

Android应用程序在后台运行时保存数据

android - 禁用 Android 应用程序中的所有动画

android - Android 中 Activity 启动时动画 View