【问题标题】:Android getting touched button's text with onTouch()Android 使用 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。对不起,如果没有任何意义嘿嘿。

【问题讨论】:

    标签: java android view


    【解决方案1】:

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

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

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

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

    【讨论】:

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