user2852142
user2852142

Reputation:

Custom Button Doesn't work with OnTouchListener

I have a problem with OnTouchListener. I created a custom button. This button properly works with onClick event. But it doesn't work with onTouch Event

This is my custom button. I want only two options just button and button_pressed.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button2_pressed"
      android:state_pressed="true" />
<item android:drawable="@drawable/button2_pressed"
      android:state_focused="true" />
<item android:drawable="@drawable/button2" />

This is my Ontouch button code. When I keep the button pressed, audio is playing and looping. When I release the button audio is stopped. This code correctly works but it doesn't work with my custom button. So when i have my finger on this button, then when I release the button or when I hold the button shortly, in every case this button show me only button2.png (above the custom button code)

pl6.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    int eventaction = event.getAction();
    switch (eventaction) {
        case MotionEvent.ACTION_DOWN: 

            n6=MediaPlayer.create(MainActivity.this, R.raw.audio4);
            n6.start();
            n6.setLooping(true);
        return true;

        case MotionEvent.ACTION_UP:   
       n6.stop();
       n6.release();

        break;
    }

    return false;

}


});

This is my other button. it is correctly work. This button is a normal button just click and play. When i pressed the button button2_pressed is appear and when I unpressed button2 is appear.

play2.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
         stopPlaying2();    
    m2=MediaPlayer.create(MainActivity.this, R.raw.sound2);
    m2.start();



    }
});   

Upvotes: 2

Views: 697

Answers (1)

user2852142
user2852142

Reputation:

I solved my problem again on my own. Lets explain; Firstly I clonned all button for example btnPlay1 and btnPlay1c but the buttons xml different to each other. the difference is only id and custom button xml file. I used 2 custom button xml I show below.

First Custom button mybutton1.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button"
      android:state_pressed="true" />
<item android:drawable="@drawable/button"
      android:state_focused="true" />
<item android:drawable="@drawable/button" />
</selector>

Second custom button mybutton1c.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed"
      android:state_pressed="true" />
<item android:drawable="@drawable/button_pressed"
      android:state_focused="true" />
<item android:drawable="@drawable/button_pressed" />
</selector>

And example from my buttons. clone button is invisible. (btnPlay2c)

 <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1" >

                <Button
                    android:id="@+id/btnPlay2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/mybutton1" />

                <Button
                    android:id="@+id/btnPlay2c"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/mybutton1c"
                    android:visibility="gone" />

            </FrameLayout>

Lastly, this is my java file. When I pressed the button, button clone is showing and when I unpressed normal button is showing. That's all.

pl10.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
    int eventaction = event.getAction();
    switch (eventaction) {
        case MotionEvent.ACTION_DOWN: 

            n10=MediaPlayer.create(MainActivity.this, R.raw.audio7);
            n10.start();
            n10.setLooping(true);
           ///focus here\\              
            pl10c.setVisibility(View.VISIBLE);
            return true;

        case MotionEvent.ACTION_UP:   
       n10.stop();
       n10.release();
      //and here\\\        
     pl10c.setVisibility(View.INVISIBLE);
        break;
    }

    return false;

}


});

This solution might be tiring but its solve the problem.

Upvotes: 1

Related Questions