Android 使用 onTouch() 触摸按钮的文本

Posted

技术标签:

【中文标题】Android 使用 onTouch() 触摸按钮的文本【英文标题】:Android getting touched button's text with onTouch() 【发布时间】:2011-06-26 04:48:54 【问题描述】:

我正在尝试制作类似鼓机的东西,当你按下按钮时它会发出声音。但是,我无法让它为每个按钮更改声音,因为一个 onTouch 方法可以处理所有事件。到目前为止的代码如下:

包 com.henzl0l.drummaschine;

导入 java.io.IOException;

导入android.app.Activity; 导入android.media.MediaPlayer; 导入 android.media.MediaPlayer.OnCompletionListener; 导入android.os.Bundle; 导入android.view.View; 导入 android.view.View.OnClickListener; 导入 android.view.View.OnTouchListener; 导入android.widget.Button; 导入android.view.MotionEvent;

公共类 DrumMaschine 扩展 Activity /** 在第一次创建活动时调用。 */ final String[] sList = new String[] "/sdcard/Music/kick.wav","/sdcard/Music/hat.wav" ; 最终媒体播放器 mPlayer1 = 新媒体播放器(); 最终媒体播放器 mPlayer2 = 新媒体播放器(); @覆盖 public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main);

Button btn_main1 = (Button) findViewById(R.id.cmd_main1); Button btn_main2 = (Button) findViewById(R.id.cmd_main2); btn_main1.setOnTouchListener(tListener1); btn_main2.setOnTouchListener(tListener1); private OnTouchListener tListener1 = new OnTouchListener() public boolean onTouch(View v, MotionEvent event) switch ( event.getAction() ) case MotionEvent.ACTION_DOWN: sPlay(0,true); return false; ; private void sPlay(Integer num, Boolean loop) try mPlayer1.reset(); mPlayer1.setDataSource(sList[num]); mPlayer1.prepare(); mPlayer1.start(); catch (IllegalArgumentException e) // TODO Auto-generated catch block e.printStackTrace(); catch (IllegalStateException e) // TODO Auto-generated catch block e.printStackTrace(); catch (IOException e) // TODO Auto-generated catch block e.printStackTrace(); ;

我似乎无法使用 v 获取按钮的文本(现在是“1”、“2”等),所以我很难过。我现在只玩了两天的android。对不起,如果没有任何意义嘿嘿。

【问题讨论】:

【参考方案1】:

onTouch 方法有一个 View 参数,它是对被触摸视图的引用。将此投射到 Button 以获取其标题:

String caption=((Button)v).getText();

顺便问一下,你为什么要使用 onTouchListener?如果您只想检测点击,请使用onClickListener,它更简单(并且具有相同的参数)。

使用标签而不是标题可能是另一种增强功能:您可以使用setTag 将标签添加到视图(它也接受可选键)并通过getTag 检索它们。例如,您可以用您的声音样本编号标记您的按钮。

【讨论】:

我使用 onTouch 是因为当你敲击节拍等时,你不会用抬起手指来计时。有时会有轻微的延迟,只是感觉不对劲。另外,我可以在 XML 文件中设置标签,这样我就不用担心把 java 代码弄乱了?我假设它会是 android:tag="1" 等? @Henzl0l 这是一个合理的论点。是的,它只是android:tag

以上是关于Android 使用 onTouch() 触摸按钮的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何为可移动的浮动按钮设置 onTouch 和 onClick 功能

Android 里面 onTouch事件有没有Up和Down

单击事件与触摸事件的区别

播放动画时无法点击android按钮

Android : 模拟点击performClick()/模拟长按performLongClick()/模拟onTouch事件

Android : 模拟点击performClick()/模拟长按performLongClick()/模拟onTouch事件