在菜单按钮上使用android手势

时间:2010-02-02 14:56:53

标签: android gesture-recognition

我想要的是一个选项菜单,用户可以选择在以下菜单之间导航:

  1. 触摸按钮,然后按下轨迹球以选择它
  2. 从Gestures Builder中绘制预定义手势
  3. 现在,我已经使用OnClickListener创建了我的按钮,并使用GestureOverlayView创建了手势。然后我选择开始一个新的Activity,具体取决于使用按下按钮还是执行手势。但是,当我尝试绘制手势时,它不会被拾取。仅识别按钮。以下是我的代码:

    public class Menu extends Activity implements OnClickListener, OnGesturePerformedListener {
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        //create TextToSpeech
        myTTS = new TextToSpeech(this, this);
        myTTS.setLanguage(Locale.US);
    
        //create Gestures
        mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
        if (!mLibrary.load()) {
         finish();
        }
    
        // Set up click listeners for all the buttons.
        View playButton = findViewById(R.id.play_button);
        playButton.setOnClickListener(this);
        View instructionsButton = findViewById(R.id.instructions_button);
        instructionsButton.setOnClickListener(this);
        View modeButton = findViewById(R.id.mode_button);
        modeButton.setOnClickListener(this);
        View statsButton = findViewById(R.id.stats_button);
        statsButton.setOnClickListener(this);
        View exitButton = findViewById(R.id.exit_button);
        exitButton.setOnClickListener(this);
    
        GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
        gestures.addOnGesturePerformedListener(this);
    }
    
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
      ArrayList<Prediction> predictions = mLibrary.recognize(gesture);
    
     // We want at least one prediction
     if (predictions.size() > 0) {
     Prediction prediction = predictions.get(0);
     // We want at least some confidence in the result
     if (prediction.score > 1.0) {
      // Show the gesture
       Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();
       //User drew symbol for PLAY
        if (prediction.name.equals("Play")) {
           myTTS.shutdown();
           //connect to game
          // User drew symbol for INSTRUCTIONS
         } else if (prediction.name.equals("Instructions")) {
               myTTS.shutdown();
               startActivity(new Intent(this, Instructions.class));
           // User drew symbol for MODE
       } else if (prediction.name.equals("Mode")){
          myTTS.shutdown();
          startActivity(new Intent(this, Mode.class));
           // User drew symbol to QUIT
      } else {
          finish();
       }
      }
     }
    }
    
    @Override
        public void onClick(View v) {
          switch (v.getId()){
          case R.id.instructions_button:
             startActivity(new Intent(this, Instructions.class));
             break;
          case R.id.mode_button:
             startActivity(new Intent(this, Mode.class));
             break;
          case R.id.exit_button:
             finish();
             break;
      }  
    }
    

    任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想在同一个视图上执行点击动作和手势动作,我不知道如何实现这一点,但是,我们可以在按钮后面有隐形视图来处理手势和按钮像往常一样处理点击事件。

默认计算器应用程序使用此方法在正常模式和高级模式之间切换。

Calculator Source

参考, com.android.calculator2.PanelSwitcher - 用于手势事件 com.android.calculator2.EventListener - 用于点击事件

希望它有所帮助。