在常规Android屏幕上,原点位于左上角,如果我将其倾斜到横向,则它将处于“新”左上角位置。
我需要获取触摸事件的(X,Y)位置,但始终考虑原点位于同一位置(无论屏幕方向如何,(0,0)应保持在一个角落)。
我不确定这是否是数学问题,或者这是否是Android问题。我正在使用getX(int i),因为我需要支持多个手指,但正如我所说,如果用户倾斜手机,原点将切换到位,我将得到(在这种情况下)错误(X,Y)。
感谢您的时间!
答案 0 :(得分:1)
使用变量跟踪方向。然后检测方向变化并更改变量。
在我的活动中,我会声明一个变量:
int mOrientation;
在onCreate()
中设置当前方向:
mOrientation = getResources().getConfiguration();
然后我重写onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mOrientation = newConfig.orientation;
}
然后在onTouchListener
检查mOrientation
中查看您是否需要交换x或y以确保您的坐标保持不变。如果你想假设坐标总是基于肖像,那么如果方向是横向,则getX()成为y值,getY()成为x值。
Configuration.ORIENTATION_LANDSCAPE和Configuration.ORIENTATION_PORTRAIT是您可以检查的int值。有关常量值的详细信息,请参阅here。
答案 1 :(得分:0)
我假设您想获得屏幕坐标。检查以下代码
Display mdisp = getWindowManager().getDefaultDisplay();
Point mdispSize = new Point();
mdisp.getSize(mdispSize);
int maxX = mdispSize.x;
int maxY = mdispSize.y;
答案 2 :(得分:0)
我通过使用getRotation()方法解决了这个问题,该方法以度为单位给出了旋转。之后我根据它改变了坐标。