java - 如何在 Android Studio 中按顺序使用带手势的 if 语句?

标签 java android

我正在尝试设置一种方法,一次只接受一个手势,然后在该手势完成后执行下一个手势。因此,例如,我想从单击开始,然后在您输入点击后,它将移动到下一个是双击。这是我正在使用的代码:

import android.content.DialogInterface;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.widget.TextView;

public class secondscreen extends ActionBarActivity implements GestureDetector.OnGestureListener,
        GestureDetector.OnDoubleTapListener{


    private TextView mainMessage;                      //variable refers to strings.xml//    private TextView InText;
    private TextView startButton;

    private GestureDetectorCompat gestureDetector;     // Secondary Variable used for gestures
    private DialogInterface.OnClickListener OnClickListener;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_secondscreen2);

        mainMessage = (TextView) findViewById(R.id.mainMessage);



        this.gestureDetector = new GestureDetectorCompat(this, this);
        gestureDetector.setOnDoubleTapListener(this);


    }

    ///////// GESTURE METHODS //////////

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        mainMessage.setText("single tap");


        return false;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        mainMessage.setText("double tap");

        return false;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        mainMessage.setText("double tapping event");

        return false;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        mainMessage.setText("down");

        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        mainMessage.setText("showing the press");


    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        mainMessage.setText("tap up");

        return false;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        mainMessage.setText("scrolling is fun");

        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        mainMessage.setText("very long presses");


    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        mainMessage.setText("flinging");

        return false;
    }

    ///////// GESTURE METHODS //////////


    //this next block is needed to run gestures//


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        this.gestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_secondscreen, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

我特别希望手势不要像现在设置的那样同时发生,应用程序将运行手势并显示文本,但它会同时显示最后一个按下的手势 - 我想知道如何在一个屏幕上设置它,以便它要求一个手势并在按下该手势后继续下一个手势,最好等待一秒钟,这样它就不会立即发生。我很确定它与 if else 语句有关,但我不知道如何表达它。

最佳答案

我能想到的一种简单方法是使用枚举结合 if 语句

枚举例子。

private enum EVENT{
    SINGLE_TAP,DOUBLE_TAP,EVENT_3,EVENT_4 ...;
}

private EVENT currentEvent=EVENT.SINGLE_TAP;

事件处理器

@Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        if (currentEvent==Event.SINGLE_TAP){
            mainMessage.setText("single tap");
            currentEvent=Event.DOUBLE_TAP;//set to next desired event
            return true;
        }

        return false;
    }

在你的其他事件处理程序中做类似的事情,在最后一个事件上我会让它循环回到第一个

如果您希望事件之间有延迟,请实现秒表并检查事件之间是否已经过了您想要的时间。像这样。

@Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
          if(stopWatch.getTime > lastEventTime+delay){//pseudo code
            if (currentEvent==Event.SINGLE_TAP){
                mainMessage.setText("single tap");
                currentEvent=Event.DOUBLE_TAP;//set to next desired event
                return true;
            }
          }

            return false;
        }

关于java - 如何在 Android Studio 中按顺序使用带手势的 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859663/

相关文章:

java - Java 中的 byte[] 操作

java - Web服务——如何部署?

java - 使用克隆或使用构造函数并分配哪一种更有效

java - app :transformClassesWithDexForDebug'. > com.android.ide.common.process.ProcessException:已完成,退出值非零 1

android - textView 上的 setAnimation 无效

java - Guava Cache CacheStats 全部为零

java - AppFuse 通用/通用 DAO 和管理器使用

android - 如何为不同的产品风格定义不同的依赖关系

android - 为什么在 Google 开发者控制台中显示的应用安装数少于应用卸载数

android - 隐藏 Activity