2013-08-11 2 views
3

У меня есть button_animation.xml в папке res/drawable для отображения различных состояний кнопок (по умолчанию, нажата, сфокусирована). Я ссылаюсь на button_animation.xml на кнопку в моем файле макета. Он отлично работает, за исключением случаев, когда я устанавливаю onTouchListener на кнопку, которая на самом деле нажата. Ниже мой код.onTouchListener переопределяет пользовательский фон на вид кнопки?

button_animation.xml

<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_focused" 
      android:state_focused="true" /> 
    <item android:drawable="@drawable/button_default" /> 
</selector> 

layout.xml

 <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/button_animation" /> 

код, который вызывает анимация сломать

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

Я не могу показать состояние кнопки, как предлагает документация, и обрабатывать onClick одновременно для любого конкретного вида?

Документация: http://developer.android.com/guide/topics/ui/controls/button.html

Спасибо,

Jason

ответ

2

Вы должны использовать button.setOnClickListener (это) вместо button.setOnTouchListener (это) и класс должен реализовывать OnClickListener.

Если вам все еще нужно обрабатывать onTouch (вниз и вверх), вы можете самостоятельно отрегулировать фоновое изображение.

public boolean onTouch(View button, MotionEvent theMotion) { 

    switch (theMotion.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      //Set button background here 
      break; 
     case MotionEvent.ACTION_UP: 
      //set button to default background 
      break; 
    } 
    return true; 
} 
+0

Для этого приложения, когда пользователь удерживает кнопку, будет воспроизводиться тон до тех пор, пока кнопка не будет отпущена. Как я могу добиться этого с помощью OnClickListener? – Jason

+0

Я изменил ответ – Shadesblade

+0

Это именно то, что я придумал для onTouchListener, но не был уверен, что это был самый эффективный способ. Я буду придерживаться такого подхода, спасибо! – Jason

1

Просто верните ложь.

public boolean onTouch(View view, MotionEvent event) {   
    if (event.getAction() == MotionEvent.ACTION_DOWN) {     

    } else if (event.getAction() == MotionEvent.ACTION_UP) {     

    } 

    return false; 
} 
4

Этот ответ довольно старый, но на всякий случай кто-то ищет, как это сделать, вот как вы можете это сделать. @Shadesblade был близок, но не совсем там.

public boolean onTouch(View button, MotionEvent theMotion) { 

    switch (theMotion.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      button.setPressed(true); 
      break; 
     case MotionEvent.ACTION_UP: 
      button.setPressed(false); 
      break; 
    } 
    return true; 
} 

Таким образом, вы можете использовать Drawable селектор XML и еще переключить состояние с ontouchlistener.

Кроме того, убедитесь, что кнопка «просмотр» нажата (класс кнопки можно щелкнуть по умолчанию, но если вы используете какую-либо другую группу просмотра/просмотра, которую вам нужно было обработать в xml).

+0

Большое вам спасибо! Я пробовал такие вещи, как View.requestFocus() и View.setSelected (true), но это было то, что мне было нужно. – TheWanderer

Смежные вопросы