Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.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 在onTouchlistener的帮助下,我的图像正在移动,但我希望它停止在特定的位置,以便我可以对其执行一些操作_Android - Fatal编程技术网

Android 在onTouchlistener的帮助下,我的图像正在移动,但我希望它停止在特定的位置,以便我可以对其执行一些操作

Android 在onTouchlistener的帮助下,我的图像正在移动,但我希望它停止在特定的位置,以便我可以对其执行一些操作,android,Android,在onTouchlistener的帮助下,我的图像正在移动,但我希望它停止在某个特定位置,以便我可以对其执行某些操作(即单击到确切位置时),我希望一些弹出窗口进入另一个要执行的活动 这就是我所做的编码。是否有任何ontouchlistner方法可以执行我想要的操作 ... ... case MotionEvent.ACTION_DOWN: float xdiff = Math.abs( x - event.getX());

在onTouchlistener的帮助下,我的图像正在移动,但我希望它停止在某个特定位置,以便我可以对其执行某些操作(即单击到确切位置时),我希望一些弹出窗口进入另一个要执行的活动

这就是我所做的编码。是否有任何ontouchlistner方法可以执行我想要的操作

    ...
    ...        
        case MotionEvent.ACTION_DOWN:
            float xdiff = Math.abs( x - event.getX());
            float ydiff =  Math.abs( y - event.getY());
            if( xdiff < 23 || ydiff < 23 ){
                isStarted = true;
            }
            break;

        case MotionEvent.ACTION_MOVE:
            if(isStarted)
            {
                x = event.getX() - img.getWidth()/2;
                y = event.getY() - img.getHeight()/2;
                Log.v("X:" + x, "Y: " + y);
                this.invalidate();
            }
            break;

        case MotionEvent.ACTION_UP:
            isStarted = false;

    }
    return true;
}
。。。
...        
case MotionEvent.ACTION\u DOWN:
float xdiff=Math.abs(x-event.getX());
float ydiff=Math.abs(y-event.getY());
if(xdiff<23 | ydiff<23){
IsStart=true;
}
打破
case MotionEvent.ACTION\u移动:
如果(已启动)
{
x=event.getX()-img.getWidth()/2;
y=event.getY()-img.getHeight()/2;
对数v(“X:+X,Y:+Y”);
这个。使无效();
}
打破
case MotionEvent.ACTION\u UP:
isStarted=false;
}
返回true;
}

根据您的意见,以下是您可以使用的通用解决方案:

    ...
    ...        
        case MotionEvent.ACTION_DOWN:
            float xdiff = Math.abs( x - event.getX());
            float ydiff =  Math.abs( y - event.getY());
            if( xdiff < 23 || ydiff < 23 ){
                isStarted = true;
            }
            break;

        case MotionEvent.ACTION_MOVE:
            if(isStarted)
            {
                x = event.getX() - img.getWidth()/2;
                y = event.getY() - img.getHeight()/2;
                Log.v("X:" + x, "Y: " + y);
                this.invalidate();
            }
            break;

        case MotionEvent.ACTION_UP:
            if(isStarted) 
            {
                Rect imgRect = new Rect();
                img.getGlobalVisibleRect(imgRect);

                // compare if imgRect is close enough to correct place
                // if: imgRect.left, imgRect.top are near door knob position
                //      then: open dialog/ start activity
            }
            isStarted = false;

    }
    return true;
}
。。。
...        
case MotionEvent.ACTION\u DOWN:
float xdiff=Math.abs(x-event.getX());
float ydiff=Math.abs(y-event.getY());
if(xdiff<23 | ydiff<23){
IsStart=true;
}
打破
case MotionEvent.ACTION\u移动:
如果(已启动)
{
x=event.getX()-img.getWidth()/2;
y=event.getY()-img.getHeight()/2;
对数v(“X:+X,Y:+Y”);
这个。使无效();
}
打破
case MotionEvent.ACTION\u UP:
如果(已启动)
{
Rect imgRect=new Rect();
img.getGlobalVisibleRect(imgRect);
//比较imgRect是否足够接近正确的位置
//如果:imgRect.left、imgRect.top靠近车门把手位置
//然后:打开对话框/启动活动
}
isStarted=false;
}
返回true;
}
基本上,在执行
操作后
比较
img
的位置,查看其是否接近所需位置
(X,Y)
,然后执行操作


如果您能提供如何在视图上初始化/绘制门和旋钮,我可以给出更具体的解决方案。

'public class main活动将活动实现扩展到TouchListener上 {

公共类MySurface扩展了SurfaceView实现Runnable {

表面持有人

Thread ourTh=null;

boolean isRunning=false;

public MySurface(Context context) 
{
    super(context);
    ourHolder=getHolder();
    ourTh=new Thread(this);
    ourTh.start();

}

public void pause() //bringin android games
{
    isRunning=false;
    while(true)
    {
        try 
        {
            ourTh.join();
        } 
        catch (InterruptedException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        break;
    }
    ourTh=null;
}
public void resume()
{
    isRunning=true;
}


@Override
public void run()
{
    while(isRunning)
    {
        if(!ourHolder.getSurface().isValid())
            continue;

        Canvas canvas=ourHolder.lockCanvas();
        canvas.drawRGB(02, 02, 150); //backgroung color hai
        if(x!=0 && y!=0)
        {
            canvas.drawBitmap(bt, x-(bt.getWidth()/2), y-(bt.getHeight()/2), null);

        }
        if(sX==256 && y==27)
        {

            canvas.drawBitmap(bt, x-(bt.getWidth()/2), y-(bt.getHeight()/2), null);
            Intent a=new Intent(MainActivity.this,dusari.class);
        }
        /*if(fX!=0 && fY!=0)
        {
            canvas.drawBitmap(bt, x-(bt.getWidth()/2), y-(bt.getHeight()/2), null);

        }*/
        ourHolder.unlockCanvasAndPost(canvas);

    }

}

你能解释一下问题是什么吗?我知道你希望图像停止移动。但是如果你不触摸它,它就不会移动。那么你想达到什么目的?你想在哪里停止它,什么时候停止它?虽然我的图像在移动,但我希望图像到达一个特定的位置,然后出现一个新的活动或弹出窗口。这是什么这个职位..你能提供更多细节吗?是某个点(x,y)?实际上,先生,我正在执行一些任务,其中有一扇门没有门把手,用户让门把手滑动到门在特定X,Y位置的位置。把手到达特定位置后,我希望它执行一些操作,即打开一个活动或弹出窗口。我可以让它滑动,但不能让它滑动在它到达特定位置后执行一些操作。我仍然无法获得所需的结果。这是我的代码“”我在上面发布了您可以看到两个问题:1)您以前发布的代码与此非常不同,2)此代码有其他问题,在我尝试运行它时无法工作..空屏幕是,因为该代码为not工作,所以我更改了代码。此代码也有问题。我如何管理此??
Thread ourTh=null;

boolean isRunning=false;

public MySurface(Context context) 
{
    super(context);
    ourHolder=getHolder();
    ourTh=new Thread(this);
    ourTh.start();

}

public void pause() //bringin android games
{
    isRunning=false;
    while(true)
    {
        try 
        {
            ourTh.join();
        } 
        catch (InterruptedException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        break;
    }
    ourTh=null;
}
public void resume()
{
    isRunning=true;
}


@Override
public void run()
{
    while(isRunning)
    {
        if(!ourHolder.getSurface().isValid())
            continue;

        Canvas canvas=ourHolder.lockCanvas();
        canvas.drawRGB(02, 02, 150); //backgroung color hai
        if(x!=0 && y!=0)
        {
            canvas.drawBitmap(bt, x-(bt.getWidth()/2), y-(bt.getHeight()/2), null);

        }
        if(sX==256 && y==27)
        {

            canvas.drawBitmap(bt, x-(bt.getWidth()/2), y-(bt.getHeight()/2), null);
            Intent a=new Intent(MainActivity.this,dusari.class);
        }
        /*if(fX!=0 && fY!=0)
        {
            canvas.drawBitmap(bt, x-(bt.getWidth()/2), y-(bt.getHeight()/2), null);

        }*/
        ourHolder.unlockCanvasAndPost(canvas);

    }

}