在菜单按钮顶部使用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布局。这可能对您有用: