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 : 模拟点击performClick()/模拟长按performLongClick()/模拟onTouch事件
Android : 模拟点击performClick()/模拟长按performLongClick()/模拟onTouch事件