Java 使用状态管理事件

Java 使用状态管理事件,java,android,android-studio,state,touch-event,Java,Android,Android Studio,State,Touch Event,我正在制作一个简单逻辑电路的单屏幕应用程序。我正在使用onTouchEvent处理用户交互。我现在正在使用ACTION\u UP,ACTION\u MOVE,&ACTION\u DOWN,但这只允许我使用一个手势。我希望能够在我的UI中选择一个选项,例如“和”门。我想用一次触摸选择我想做的事情,然后下一次触摸在屏幕上放置闸门。相反,我的onTouchEvent只允许我触摸我想要的组件,我必须将手指放在屏幕上才能将其拖动到我想要放置的位置。这不是我想要的 我曾尝试研究如何实现某种状态变量,以允许o

我正在制作一个简单逻辑电路的单屏幕应用程序。我正在使用
onTouchEvent
处理用户交互。我现在正在使用
ACTION\u UP
ACTION\u MOVE
,&
ACTION\u DOWN
,但这只允许我使用一个手势。我希望能够在我的UI中选择一个选项,例如“和”门。我想用一次触摸选择我想做的事情,然后下一次触摸在屏幕上放置闸门。相反,我的
onTouchEvent
只允许我触摸我想要的组件,我必须将手指放在屏幕上才能将其拖动到我想要放置的位置。这不是我想要的

我曾尝试研究如何实现某种状态变量,以允许
onTouchEvent
等待下一次触摸,但我认为我没有正确理解如何实现它

@覆盖
公共布尔onTouchEvent(MotionEvent MotionEvent){
Log.d(“调试”,“在onTouchEvent中”);
if((motionEvent.getAction()&motionEvent.ACTION\u掩码)==motionEvent.ACTION\u向下){
Touch.horizontalpothed=(int)motionEvent.getX()/grid.getBlockSize();
Touch.verticaltouch=(int)motionEvent.getY()/grid.getBlockSize();
whatWasTouched=whatWasTouched(Touch.horizontalpothed,Touch.verticalTouched);
}else if((motionEvent.getAction()&motionEvent.ACTION\u MASK)==motionEvent.ACTION\u MOVE){
//什么也不做,手指在屏幕上移动
}
else if((motionEvent.getAction()&motionEvent.ACTION\u MASK)==motionEvent.ACTION\u UP){
Touch.secondHorizontalTouch=(int)motionEvent.getX()/grid.getBlockSize();
Touch.secondVerticalTouch=(int)motionEvent.getY()/grid.getBlockSize();
placeComponent();
draw();
}
返回true;
}

我希望我在屏幕上的第一次触摸能够选择一个选项,例如:“和”、“或”、“不”、“切换”、“编辑”等,然后我的第二次触摸完成所需的操作。我还希望能够触摸我放在屏幕上的一个组件,然后触摸另一个组件,这样我就可以将它们连接在一起。

默认情况下,Android中的事件侦听器是等待的-您不必提供任何延迟

只需在ImageView上设置onTouchEvent(…)侦听器并显示第一个位图。触摸ImageView时,显示下一个位图,依此类推。你所要做的就是记录有多少次触摸,以便知道要显示哪个图像(图像1、2、3、4等)

例如

public class LoadImage extends Activity {

int imageNumber = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_load_image);

    //get an image and create a bitmap from it

    ImageView imageView = (ImageView) findViewById(R.id.imageView);
    imageView.setImageBitmap(bitmap);
}


}

我可以通过使用一个静态类来处理触摸的状态来解决这个问题

@覆盖
公共布尔onTouchEvent(MotionEvent MotionEvent){
Log.d(“调试”,“在onTouchEvent中”);
if(placeState.getState()==false){
if((motionEvent.getAction()&motionEvent.ACTION\u掩码)==motionEvent.ACTION\u UP){
Touch.horizontalpothed=(int)motionEvent.getX()/grid.getBlockSize();
Touch.verticaltouch=(int)motionEvent.getY()/grid.getBlockSize();
whatWasTouched=whatWasTouched(Touch.horizontalpothed,Touch.verticalTouched);
if(whatWasTouched.equals(“删除”)){
visualComponents.clear();
logicalComponents.clear();
}
placeState.toggleState();//设置为true
draw();
}
}else if(placeState.getState()==true){
Touch.secondHorizontalTouch=(int)motionEvent.getX()/grid.getBlockSize();
Touch.secondVerticalTouch=(int)motionEvent.getY()/grid.getBlockSize();
placeComponent();
placeState.toggleState();//设置为false
draw();
}
返回true;
}

这并不是我想要做的。我还想在我的程序中执行其他功能,这些功能需要初始触摸和目标触摸。我不仅仅是用触摸画图像。
@Override
public boolean onTouchEvent(MotionEvent evt) {
    if (evt.getAction() == MotionEvent.ACTION_DOWN) {
        imageNumber++;
        switch (imageNumber) {
            case 2:
                // show image 2
                break;
            case 3:
                // show image 3
                break;
            ...
        }
        return true;
    }
    return false;
}