Подсветка кнопок - как применить onTouch к 2 кнопкам
У меня есть 2 кнопки, как это:
Button b = new Button(this);
b.setText("Button onw");
b.setId(1111);
b.setBackgroundDrawable(R.drawable.button);
b.setOnTouchListener(listenerOne);
rootLayout.addView(b);
Button b1 = new Button(this);
b1.setText("Button two");
b1.setBackgroundDrawable(R.drawable.button);
b1.setOnTouchListener(listenerOne);
RelativeLayout.LayoutParams i = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, UIUtils.convertDPToPixels(activity
.getResources().getDisplayMetrics(), 45));
i.addRule(RelativeLayout.BELOW, b.getId());
rootLayout.addView(b1, i);
Теперь это мое прикосновение:
OnTouchListener listenerOne = new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
view.getBackground().setColorFilter(Color.parseColor("#B7B2B0"), PorterDuff.Mode.MULTIPLY);
view.invalidate();
break;
case MotionEvent.ACTION_CANCEL:
view.getBackground().clearColorFilter();
view.invalidate();
break;
case MotionEvent.ACTION_UP:
view.getBackground().clearColorFilter();
view.invalidate();
break;
}
return false;
}
};
Теперь проблема в том, что когда я касаюсь одной кнопки, вторая кнопка также выделяется? почему так, что здесь не так?
2 ответа
Использовать этот
setBackgroundResource(R.color.rojo);
Вы можете использовать строку также, чтобы определить цвет, но он должен определить в ресурсе.
Используйте анонимный внутренний класс, как показано ниже
b.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
b.setBackgroundColor(Color.BLUE);
break;
case MotionEvent.ACTION_UP:
b.setBackgroundColor(Color.GREEN);
break;
}
return true;
}
});
Аналогично для кнопки b1
b1.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
b1.setBackgroundColor(Color.BLUE);
break;
case MotionEvent.ACTION_UP:
b1.setBackgroundColor(Color.GREEN);
break;
}
return true;
}
});
Изменить: я использовал вышеуказанный код. Работает нормально. Когда когда-либо кнопка в касании вниз цвет меняется на синий, а вверх меняется на зеленый.
b1.setOnTouchListener(listenerOne);
b.setOnTouchListener(listenerOne);
И слушатель
OnTouchListener listenerOne = new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
view.setBackgroundColor(Color.BLUE);
break;
case MotionEvent.ACTION_UP:
view.setBackgroundColor(Color.GREEN);
break;
}
return false;
}
};
Изменить 2:
b.setBackgroundColor(Color.GREEN);//default background color green
b1.setBackgroundColor(Color.GREEN); // default background color green
Используйте код в редактировании или анонимный внутренний класс
Прикосновение вниз
При отпускании кнопки фон снова станет зеленым