Пользовательская кнопка не работает с OnTouchListener

У меня проблема с OnTouchListener. Я создал пользовательскую кнопку. Эта кнопка корректно работает с событием onClick. Но это не работает с событием onTouch.

Это моя пользовательская кнопка. Мне нужны только два варианта: кнопка и кнопка_нажатия.

<?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" />

Это мой код кнопки Ontouch. Когда я держу кнопку нажатой, звук воспроизводится и зацикливается. Когда я отпускаю кнопку, звук останавливается. Этот код работает правильно, но не работает с моей пользовательской кнопкой. Поэтому, когда я кладу палец на эту кнопку, то, когда я отпускаю кнопку или кратковременно удерживаю кнопку, в каждом случае эта кнопка показывает мне только button2.png (над пользовательским кодом кнопки)

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;

}


});

Это моя другая кнопка. это правильно работает. Это обычная кнопка, просто нажмите и играйте. Когда я нажал кнопку button2_pressed, появляется, а когда я не нажимаю кнопку2, появляется.

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();



    }
});   

person Community    schedule 08.03.2015    source источник
comment
После нажатия кнопки он станет сфокусированным. Я предполагаю, что второй элемент в вашем селекторе всегда принимает значение true, поэтому button2_pressed продолжает отображаться. Вы можете попробовать закомментировать этот конкретный элемент, чтобы подтвердить.   -  person MH.    schedule 08.03.2015
comment
button2_pressed не появляется с этим событием. Появляется только кнопка2. Этот пользовательский код кнопки работает с событием onclick. Я добавляю к тексту выше мой другой код. Но это не работает с событием onTouch, некоторые вещи могут отличаться от пользовательского кода кнопки, но я не знаю.   -  person    schedule 08.03.2015


Ответы (1)


Я снова решил свою проблему самостоятельно. Давайте объясним; Сначала я клонировал все кнопки, например, btnPlay1 и btnPlay1c, но кнопки xml отличаются друг от друга. разница только в id и XML-файле пользовательской кнопки. Я использовал 2 пользовательских кнопки xml, которые показаны ниже.

Первая пользовательская кнопка 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>

Вторая пользовательская кнопка 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>

И пример с моих кнопок. кнопка клонирования невидима (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>

Наконец, это мой java-файл. Когда я нажимаю кнопку, отображается клон кнопки, а когда я не нажимаю, отображается обычная кнопка. Это все.

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;

}


});

Это решение может быть утомительным, но оно решает проблему.

person Community    schedule 09.03.2015