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;
}