gpt4 book ai didi

android - 我可以将 motionEvent .getRawY() 与 View 一起使用吗?获取顶部()?

转载 作者:行者123 更新时间:2023-11-30 04:20:25 25 4
gpt4 key购买 nike

我正在制作一个关于围棋游戏的程序,我正在尝试编写一些代码来允许人们放置一个珠子,它实际上只是显示一个看不见的珠子。但是在反复使用它一个小时之后,我似乎无法弄清楚为什么我的运动事件的 Y 坐标似乎总是比它需要的位置低 2 行。

我的数组填充代码

for(int y=0; y< 9;y++)
{
for(int x=0;x<9;x++)
{
String name="Whitebead" + ((9*y)+x+2); //The +2 is because of a naming problem
WhitePieces[x][y]=(ImageView) findViewById(getResources().getIdentifier(name, "id", getPackageName()));
}

}

我处理运动事件的代码

    @Override
public boolean onTouchEvent(MotionEvent e)
{

if(e.getAction() == MotionEvent.ACTION_DOWN)
{
float X=e.getRawX();
float Y=e.getRawY();

if(X>Board.getLeft() && X<Board.getRight())
if(Y< Board.getTop() && Y>Board.getBottom());
player1.placepiece(X, Y);

}
return super.onTouchEvent(e);
}

最后我的代码将哪个珠子解析为哪个坐标

    public void placepiece(float X, float Y)
{
int[] pieceindex=resolvePiece(X,Y);

pieces[pieceindex[0]][pieceindex[1]].setVisibility(ImageView.VISIBLE);

}


private int[] resolvePiece(float x, float y) {

int Xindex=0;
int[] oldcoords= new int[2]; //cordinates are like so {xCoord, Ycoord}
int[] newcoords= new int[2];
oldcoords[0]=pieces[0][0].getLeft(); //set the oldcoordinates to the first index
oldcoords[1]=pieces[0][0].getTop();
for(int i=1; i<9;i++) //go through the 9 indexs to find the closest X value
{
newcoords[0]=pieces[i][0].getLeft();
newcoords[1]=pieces[i][0].getTop();
if(Math.abs((int)x-newcoords[0])<Math.abs((int)x-oldcoords[0]))
{
Xindex=i;
oldcoords[0]=newcoords[0];
}
}

int Yindex=0;
oldcoords[0]=pieces[0][0].getLeft(); //Reset oldcoords again
oldcoords[1]=pieces[0][0].getTop();
for(int n=1; n<9;n++) //Go through the 9 indexes for the closest Y value
{
newcoords[0]=pieces[0][n].getLeft();
newcoords[1]=pieces[0][n].getTop();
if(Math.abs((int)y-newcoords[1])<Math.abs((int)y-oldcoords[1]))
{
Yindex=n;
oldcoords[1]=newcoords[1];
}

}

int[] rInt= new int[]{Xindex,Yindex};
return rInt;
}

//////编辑:固定我想通了,在 android 窗口的顶部大约有一英寸的空间,标题和电池生命周期和东西都在那里,当你获得运动坐标时,它会占据整个屏幕,其中 .getTop() 仅从线性位置获取布局开始。因此,我没有使用 .getTop 或 .getLeft,而是使用了 .getLocationInWindow(oldcoord[]) 并将我需要的信息放入我的 oldcoord 数组中。

最佳答案

//////编辑:已修复 我想通了,在 android 窗口的顶部大约有一英寸的空间,标题和电池生命周期和其他东西都在那里,当你获得运动坐标时,它会占据整个空间屏幕,其中 .getTop() 仅从线性布局开始的位置获取。因此,我没有使用 .getTop 或 .getLeft,而是使用了 .getLocationInWindow(oldcoord[]) 并将我需要的信息放入我的 oldcoord 数组中。

关于android - 我可以将 motionEvent .getRawY() 与 View 一起使用吗?获取顶部()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9340170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com