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 会接收两个事件 - 触摸时为 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 回答