Ich habe ein Problem damit, dass mein Button in einem hervorgehobenen Zustand bleibt, nachdem ich Folgendes getan habe:
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
v.performClick();
Log.d("Test", "Performing click");
return true;
}
}
return false;
}
});
}
}
In Bezug auf den obigen Code erwarte ich bei der Verwendung, dass der Klick auf die Schaltfläche von der Berührung verarbeitet wird, und durch die Rückgabe von "true" sollte die Behandlung beim touchListener beendet werden.
Dies ist jedoch nicht der Fall. Die Schaltfläche bleibt in einem hervorgehobenen Zustand, obwohl der Klick aufgerufen wird.
Was ich bekomme ist:
Test - calling onClick
Test - Performing click
Wenn ich dagegen den folgenden Code verwende, wird auf die Schaltfläche geklickt, es werden dieselben Ausdrucke gedruckt, aber die Schaltfläche bleibt nicht in einem hervorgehobenen Zustand hängen:
public class MainActivity extends AppCompatActivity {
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton button = (AppCompatButton) findViewById(R.id.mybutton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "calling onClick");
}
});
button.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
v.getBackground().setColorFilter(0xe0f47521,PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
}
case MotionEvent.ACTION_UP: {
v.getBackground().clearColorFilter();
v.invalidate();
// v.performClick();
Log.d("Test", "Performing click");
return false;
}
}
return false;
}
});
}
}
Ich bin etwas verwirrt darüber, was die Antwortkette für das Touch-Ereignis ist. Ich vermute, dass es ist:
1) TouchListener
2) ClickListener
3) ParentViews
Kann das auch jemand bestätigen?