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