2013-09-02 3 views
0

Я делаю приложение, и я хочу использовать пользовательские кнопки. Код я использую для изменения фона при нажатии кнопки следующая:Использование правильного MotionEvent для пользовательских кнопок

button3.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       button3.setBackgroundResource(R.drawable.blue_buttonn); 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       button3.setBackgroundResource(R.drawable.black_buttonn); 
      }else if (event.getAction() == MotionEvent.ACTION_HOVER_MOVE) { 
       button3.setBackgroundResource(R.drawable.black_buttonn); 
      } 
      return false; 
     } 
    }); 

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

Я отредактировал мой код, добавив событие HOVER_MOVE, которое работает, когда вы выталкиваете палец из кнопки. Но поскольку эти кнопки находятся внутри элемента пользовательского списка, если вы перемещаете палец за пределами текущего элемента, событие HOVER_MOVE не запускается.

enter image description here

ответ

3

Попробуйте эту

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item  android:state_enabled="false"  
android:drawable="@drawable/default_bgnd" /> 

<item  android:state_focused="true"   
android:drawable="@drawable/new_green" /> 

<item  android:state_pressed="true"   
android:drawable="@drawable/new_green" /> 

<item  android:state_checked="true"   
android:drawable="@drawable/new_green"/> 

<item  android:state_selected="true"   
android:drawable="@drawable/new_green" /> 
</selector> 

Поместите этот XML в папке и вводимого коэффициента Установите это как Backgroud к кнопке в XML Good Luck

+0

это работает. Есть ли способ сделать это в java-коде? – mremremre1

0

Попробуйте возвращение true вместо false. True указывает, что слушатель потреблял TouchEvent.

+0

К сожалению, он не работает – mremremre1

0

Попробуйте это.

onButton.setOnTouchListener(new View.OnTouchListener() { 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
if(ParentalSet.equalsIgnoreCase("OFF")){ 
switch (event.getAction()) { 
case MotionEvent.ACTION_DOWN: 
((TextView) v).setTextColor(0xFF000000); 
onButton.setBackgroundDrawable(getResources().getDrawable(buttonGlow)); 
break; 
case MotionEvent.ACTION_UP: 
onButton.setTextColor(Color.parseColor                 (OptimumConstants.CODE_000000)); 
onButton.setBackgroundDrawable(getResources().getDrawable           (R.drawable.new_off)); 
break; 
default: 
break; 
} 
} 
return false; 
} 
});