Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在菜单按钮顶部使用android手势_Android_Gesture Recognition - Fatal编程技术网

在菜单按钮顶部使用android手势

在菜单按钮顶部使用android手势,android,gesture-recognition,Android,Gesture Recognition,我想要的是有一个选项菜单,用户可以在其中选择在以下菜单之间导航: 触摸按钮,然后按下轨迹球以选择它 从手势生成器绘制预定义手势 现在,我已经创建了带有OnClickListener的按钮和带有GestureOverlayView的手势。然后,我选择启动一个新的活动,具体取决于用户是按下按钮还是执行手势。然而,当我试图画一个手势时,它没有被拿起。只有按下按钮才能识别。以下是我的代码: public class Menu extends Activity implements OnClickList

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

  • 触摸按钮,然后按下轨迹球以选择它
  • 从手势生成器绘制预定义手势
  • 现在,我已经创建了带有
    OnClickListener
    的按钮和带有
    GestureOverlayView
    的手势。然后,我选择启动一个新的
    活动
    ,具体取决于用户是按下按钮还是执行手势。然而,当我试图画一个手势时,它没有被拿起。只有按下按钮才能识别。以下是我的代码:

    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;
      }  
    }
    
    public类菜单扩展活动实现OnClickListener、OnEsturePerformedListener{
    @凌驾
    创建时的公共void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //创建TextToSpeech
    myTTS=新文本到语音(这个,这个);
    myTTS.setLanguage(Locale.US);
    //做手势
    mLibrary=GestureLibraries.fromRawResource(this,R.raw.bigests);
    如果(!mLibrary.load()){
    完成();
    }
    //为所有按钮设置单击侦听器。
    查看播放按钮=findViewById(R.id.play_按钮);
    playButton.setOnClickListener(此);
    查看说明按钮=findViewById(R.id.说明按钮);
    instructionsButton.setOnClickListener(此);
    查看模式按钮=findViewById(R.id.mode_按钮);
    modeButton.setOnClickListener(此);
    查看statsButton=findViewById(R.id.stats_按钮);
    statsButton.setOnClickListener(此);
    查看退出按钮=findViewById(R.id.exit_按钮);
    setOnClickListener(这个);
    GestureOverlayView手势=(GestureOverlayView)findViewById(R.id.birters);
    手势。添加感知性能监听器(此);
    }
    已执行的检测的公共无效(手势覆盖视图覆盖、手势){
    ArrayList predictions=mLibrary.recognize(手势);
    //我们至少需要一个预测
    如果(预测值.size()>0){
    预测=预测。获取(0);
    //我们希望至少对结果有一些信心
    如果(预测分数>1.0){
    //摆姿势
    Toast.makeText(this,prediction.name,Toast.LENGTH_SHORT).show();
    //用户为游戏绘制符号
    if(prediction.name.equals(“Play”)){
    myTTS.shutdown();
    //连接到游戏
    //用户为说明绘制符号
    }else if(prediction.name.equals(“指令”)){
    myTTS.shutdown();
    startActivity(新意图(本,指令类));
    //用户绘制的模式符号
    }else if(prediction.name.equals(“Mode”)){
    myTTS.shutdown();
    startActivity(新意图(这个,Mode.class));
    //用户绘制符号以退出
    }否则{
    完成();
    }
    }
    }
    }
    @凌驾
    公共void onClick(视图v){
    开关(v.getId()){
    案例R.id.说明按钮:
    startActivity(新意图(本,指令类));
    打破
    案例R.id.mode_按钮:
    startActivity(新意图(这个,Mode.class));
    打破
    案例R.id.exit_按钮:
    完成();
    打破
    }  
    }
    

    任何建议都将不胜感激!

    如果我理解正确,您希望在同一视图上同时执行单击操作和手势操作,我不确定如何实现这一点,但是,我们可以在按钮后面有不可见的视图来处理手势,顶部的按钮将像往常一样处理单击事件

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

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


    希望有帮助。

    手势是否正常?是否调用了
    onGesturePerformed
    ?您的布局是什么样的?很可能您的手势覆盖层不在用户绘制手势的位置。手势在许多ui控件上似乎不太正常。我不得不恢复使用专用的“幻灯片我”控件,其中用户滑过该控件并显示“已检测到手势”。但它会吞噬不动产。请查看我的应用程序CueBrain以查看其外观。此问题中缺少一半信息:请显示您的xml布局。这可能对您有用: