Reputation:
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
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