我正在做一个简单的逻辑电路的单屏应用。我正在使用onTouchEvent
处理用户交互。我现在正在使用ACTION_UP
,ACTION_MOVE
和ACTION_DOWN
,但这只允许我使用一个手势。我希望能够在我的UI中选择一个选项,例如“ AND”门。我想使用一次触摸来选择我要执行的操作,然后使用下一次触摸来将门放置在屏幕上。取而代之的是,我的onTouchEvent
仅允许我触摸所需的组件,并且必须将手指放在屏幕上才能将其拖动到要放置的位置。这不是我想要的。
我尝试研究如何实现某种状态变量以允许onTouchEvent
等待下一次触摸,但是我认为我不正确地理解如何实现它。
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
Log.d("Debugging", "In onTouchEvent");
if((motionEvent.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
Touch.horizontalTouched = (int)motionEvent.getX()/ grid.getBlockSize();
Touch.verticalTouched = (int)motionEvent.getY()/ grid.getBlockSize();
whatWasTouched = whatWasTouched(Touch.horizontalTouched, Touch.verticalTouched);
}else if((motionEvent.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE){
//do nothing, finger is moving on screen
}
else if((motionEvent.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP){
Touch.secondHorizontalTouch = (int)motionEvent.getX()/ grid.getBlockSize();
Touch.secondVerticalTouch = (int)motionEvent.getY()/ grid.getBlockSize();
placeComponent();
draw();
}
return true;
}
我希望我在屏幕上的第一次触摸能够选择一个选项,例如:“ AND”,“ OR”,“ NOT”,“ SWITCH”,“ EDIT”等,然后我的第二次触摸完成所需的动作。我还希望能够触摸我放在屏幕上的组件,然后触摸另一个组件,以便可以将它们连接在一起。
答案 0 :(得分:0)
默认情况下,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);
}
@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;
}
}
答案 1 :(得分:0)
我能够通过使用一个静态类来解决这个问题,该类将处理我的触摸状态。
@Override
public boolean onTouchEvent(MotionEvent motionEvent) {
Log.d("Debugging", "In onTouchEvent");
if (placeState.getState() == false) {
if ((motionEvent.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) {
Touch.horizontalTouched = (int) motionEvent.getX() / grid.getBlockSize();
Touch.verticalTouched = (int) motionEvent.getY() / grid.getBlockSize();
whatWasTouched = whatWasTouched(Touch.horizontalTouched, Touch.verticalTouched);
if(whatWasTouched.equals("DELETE")){
visualComponents.clear();
logicalComponents.clear();
}
placeState.toggleState();//sets to true
draw();
}
}else if (placeState.getState() == true) {
Touch.secondHorizontalTouch = (int) motionEvent.getX() / grid.getBlockSize();
Touch.secondVerticalTouch = (int) motionEvent.getY() / grid.getBlockSize();
placeComponent();
placeState.toggleState();//sets to false
draw();
}
return true;
}