2011-02-12 33 views
2

我正在嘗試製作類似鼓機的東西,當您按下按鈕時會播放聲音。但是,我無法改變每個按鈕的聲音,因爲一個onTouch方法處理所有事件。用VAndroid使用onTouch觸摸按鈕的文本()

 
package com.henzl0l.drummaschine;

import java.io.IOException;

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

public class DrumMaschine extends Activity { /** Called when the activity is first created. */ final String[] sList = new String[] {"/sdcard/Music/kick.wav","/sdcard/Music/hat.wav" }; final MediaPlayer mPlayer1 = new MediaPlayer(); final MediaPlayer mPlayer2 = new MediaPlayer(); @Override 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(); } };

}

我似乎無法得到該按鈕的文本(這是正確的,現在,「1」,「2」等),所以:這是到目前爲止的代碼我非常難過。我只用了兩天就玩了android。對不起,如果沒有任何意義,嘿嘿

回答

1

onTouch方法有一個View參數,它是對觸摸視圖的引用。演員這到按鈕得到它的標題:

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

順便說一句,你爲什麼使用onTouchListener?如果您只想檢測點擊,請使用onClickListener,這很簡單(並且具有相同的參數)。

使用標籤而不是標題可能是另一個增強功能:您可以使用setTag(它也接受可選鍵)將標籤添加到視圖並通過getTag檢索它們。例如,你可以用你的聲音樣本號來標記你的按鈕。

+1

我使用的是onTouch,因爲當您敲擊節拍等時,您不會用手指擡起時間。有時會有輕微的延遲,而且感覺不對。 此外,我可以在XML文件中設置標籤,所以我不必擔心使java代碼混亂?我假設它會是android:tag =「1」等? – Henzl0l 2011-02-12 20:26:55