Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MotionEvent.ACTION\u移动太快,无法获得正确的X&Y坐标_Android - Fatal编程技术网

Android MotionEvent.ACTION\u移动太快,无法获得正确的X&Y坐标

Android MotionEvent.ACTION\u移动太快,无法获得正确的X&Y坐标,android,Android,我正在使用动作移动&动作向下 用于在我的应用程序中获取x&y,以便我可以检查画布绘制线是否交叉/触碰,但当我的代码运行所有循环时,操作动作获取x&y坐标太快,获取另一个x&y坐标并再次运行代码 它在实际操作中工作得很好,因为这将在时间中断后被触及,所以我的代码有时间完成所有工作 我的问题是:如何让它检查我的所有代码,然后移动到另一个坐标&这不会花费太多时间 这是我的一些代码-> @Override public boolean onTouchEvent(MotionEvent event) {

我正在使用动作移动&动作向下

用于在我的应用程序中获取x&y,以便我可以检查画布绘制线是否交叉/触碰,但当我的代码运行所有循环时,操作动作获取x&y坐标太快,获取另一个x&y坐标并再次运行代码

它在实际操作中工作得很好,因为这将在时间中断后被触及,所以我的代码有时间完成所有工作

我的问题是:如何让它检查我的所有代码,然后移动到另一个坐标&这不会花费太多时间

这是我的一些代码->

@Override
public boolean onTouchEvent(MotionEvent event) {
    int ac=event.getAction();
    int x=(int) event.getX();
    int y=(int) event.getY();

int x1=0;int x2=0;





int x3=0;int x4=0;
    boolean dont=false;
    switch(ac){
    case MotionEvent.ACTION_DOWN:

for(int i=art.length-1;i>=0;i--){

    if(art[i]<=Integer.valueOf(x)){
        x1=art[i];

        if(x1+2<x){
            x3=x1+31;
            dont=true;
        }else{
            x3=x1+2;

        }
        break;
    }


}   

for(int i=aot.length-1;i>=0;i--){
    if(aot[i]<=Integer.valueOf(y)){

        x2=aot[i];


        if(y-x2==2||y-x2==1||y==x2&&dont==true){

            x4=x2+2;
        }else{
            x4=x2+46;


        }

        break;
            }
}


if(count.containsKey(x1+","+x2+","+x3+","+x4)){
    AlertDialog mk=new AlertDialog.Builder(getContext()).create();
    mk.setMessage("Game Over!");
    mk.show();
}
    break;
    case MotionEvent.ACTION_MOVE:


for(int i=art.length-1;i>=0;i--){

    if(art[i]<=Integer.valueOf(x)){
        x1=art[i];

        if(x1+2<x){
            x3=x1+31;
            dont=true;
        }else{
            x3=x1+2;

        }
        break;
    }


}   

for(int i=aot.length-1;i>=0;i--){
    if(aot[i]<=Integer.valueOf(y)){

        x2=aot[i];


        if(y-x2==2||y-x2==1||y==x2&&dont==true){

            x4=x2+2;
        }else{
            x4=x2+46;


        }

        break;
            }
}


if(count.containsKey(x1+","+x2+","+x3+","+x4)){
    AlertDialog mk=new AlertDialog.Builder(getContext()).create();
    mk.setMessage("Game Over!");
    mk.show();
}

break;
    }


    return true;

}

你到底想做什么?这是一个随机生成线条的视图,我想如果任何用户只触摸线条,那么它将显示一个AlertDialog,我尝试为它建立公式,所以它不会用于循环,但我无法做到这一点。。因此,在这段代码中,当调用ActionUP时,它将显示AlertDialog,但当我使用ActionMove太快时,它将不显示任何内容,因为触摸事件获得非常快的坐标。
art[0]=7;
art[1]=36;
art[2]=65;
art[3]=94;
art[4]=123;
art[5]=152;
art[6]=181;
art[7]=210;
art[8]=239;
art[9]=268;
art[10]=297;
art[11]=326;
art[12]=355;
art[13]=384;
art[14]=413;
art[15]=442;
art[16]=471;

        aot[0]=7;
        aot[1]=51;
        aot[2]=95;
        aot[3]=139;
        aot[4]=183;
        aot[5]=227;
        aot[6]=271;
        aot[7]=315;
        aot[8]=359;
        aot[9]=403;
        aot[10]=447;
        aot[11]=491;
        aot[12]=535;
        aot[13]=579;
        aot[14]=623;
        aot[15]=667;
        aot[16]=711;