Ich versuche eine Methode zu erstellen, die als ColorStateList
oder Selector fungiert, wenn eine Ansicht gedrückt wird. Wenn eine Ansicht in die Methode onClickColorSelector
übergeben wird, nimmt sie die Ansicht und setzt eine setOnTouchListener
, so dass, wenn der Benutzer auf eine view
drückt, die Ansicht einen Selektor-Effekt bekommt.onTouchListener funktioniert nur beim zweiten Drücken
Nun das Problem ist, dass onTouchListener
nur aufgerufen wird, wenn eine Ansicht zum zweiten Mal angeklickt wird. Warum verhält es sich so und wie löst man es?
Hinweis! Bitte nicht mich ColorStateList vorschlagen!
onClickColorSelector ist in einer Klasse namens ViewSelector
public void onClickColorSelector(View view, final int onPressColor) {
Log.d("TAG" , "1");
view.setOnTouchListener(new View.OnTouchListener() {
int defaultTextColor = 0;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("TAG" , "2");
if (view instanceof TextView) {
Log.d("TAG" , "3");
defaultTextColor = ((TextView) view).getCurrentTextColor();
((TextView) view).setTextColor(onPressColor);
}
Log.d("TAG" , "4");
view.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
return true;
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
if (view instanceof TextView) {
((TextView) view).setTextColor(defaultTextColor);
}
view.getBackground().setColorFilter(null);
return true;
}
return false;
}
});
}
Dies ist, wie onClickColorSelector();
aus einer anderen Klasse aufgerufen:
ViewSelector vs = new ViewSelector(this);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
vs.onClickColorSelector(loginBtn, Color.RED);
}
});
Aufruf dieses 'vs.onClickColorSelector (loginBtn, Color.RED);' im 'OnCreate()' Methode ...... – sushildlh
@sushildlh Es war die Antwort! Haha ist so lustig, wenn so ein kleines Ding verpasst wird! schreibe es als Antwort bitte – Muddz