0

ボタンonTouchLitsenerは、クリックしても変化しません。クリックするとボタンが変わるようにしたい。

    public class SoundActivity extends Activity implements OnTouchListener {
    /** Called when the activity is first created. */
    MediaPlayer mp;
    MediaPlayer mp1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);


        final Button zero = (Button) this.findViewById(R.id.button1);
        zero.setOnTouchListener(this);

        mp = MediaPlayer.create(this, R.raw.song_3);

        //final ImageButton zero = (ImageButton) this.findViewById(R.id.imageButton1);
        //zero.setOnTouchListener(this);

        //mp = MediaPlayer.create(this, R.raw.song_3);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event)
    {  
        switch (event.getAction())
        {
        case MotionEvent.ACTION_DOWN:
        {
            mp.setLooping(true);
            mp.start();
        }
        break;
        case MotionEvent.ACTION_UP:
        {
            mp.pause();
        }
        break;
    }
    return true;
    }
    //public boolean onTouchEvent(View v, MotionEvent event) {
        //ImageView iv = (ImageView) v;

       // if (event.getAction() == MotionEvent.ACTION_DOWN) {
           // iv.setImageResource(R.drawable.arrow_leftpressed);
           // return true;
        //} else if (event.getAction() == MotionEvent.ACTION_UP) {
           // iv.setImageResource(R.drawable.arrow_left);
            //return true;
        //}

        //return false;
    //}

    public boolean onTouchEvent(View v, MotionEvent event) {
        Button zero = (Button) v;

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            zero.setBackgroundResource(R.drawable.arrow_leftpressed);
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            zero.setBackgroundResource(R.drawable.arrow_left);
            return true;
        }
        return false;
    }

}

私のxmlファイル

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"
        android:clickable="true"
         />

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/button4"
        android:clickable="true"
         />

</LinearLayout>
4

2 に答える 2

0

onClickListenerを使用することをお勧めします。

onTouchListener は、ボタンを押したときに 2 つのイベントを受け取ります。ボタンに触れているときは ACTION_DOWN を、離すときは ACTION_UP を受け取ります。そのため、プレーヤーはその直後に開始および停止します。

于 2012-06-17T16:19:18.473 に答える
0

ボタンのコードを間違ったブロックに書きました。

あなたが書いzero.setOnTouchListener(this);たので、ボタンをタッチするたびに onTouch が呼び出されませんonTouchEvent

そのため、onTouch にボタン コードを追加します。

コードに次の変更を加えます。

このブロック全体を削除します

public boolean onTouchEvent(View v, MotionEvent event) {
        Button zero = (Button) v;

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            zero.setBackgroundResource(R.drawable.arrow_leftpressed);
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            zero.setBackgroundResource(R.drawable.arrow_left);
            return true;
        }

        return false;
    }

上記のコードを onTouch ブロックに移動します。以下は、あるべき姿です。

@Override
    public boolean onTouch(View v, MotionEvent event) {
        Button zero = (Button) v;

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            zero.setBackgroundResource(R.drawable.arrow_leftpressed);
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            zero.setBackgroundResource(R.drawable.arrow_left);
            return true;
        }

        return false;
    }
于 2012-06-17T16:22:37.343 に答える