Ich habe für mich eine Lösung gefunden. Ich entferne alle Selektorzustände aus der ListView (setSelector (new StateListDrawable())) und füge einen OnTouchListener zur ListView hinzu.
Der OnTouchListener löst verschiedene Methoden zum Festlegen oder Löschen eines ColorFilters auf dem gezeichneten Hintergrund aus dem Ansichtselement aus. Der ColorFilter platziert nur über den bemalten (Neun-Patch oder programmatisch Hintergrund) Bereich und nicht über die Lücke.
public class ClickAndReleaseListener implements View.OnTouchListener
{
/**
* Activity with integrated Adapter (from ListView) to do the triggered methods
*/
public IClickAndReleaseListener releaseListener;
/**
* Call from Activity (with the ListView) ex. listView.setOnTouchListener(new ClickAndReleaseListener(Activity.this))
* @param releaseListener => Activity with implemented Interface
*/
public ClickAndReleaseListener(IClickAndReleaseListener releaseListener)
{
this.releaseListener = releaseListener;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
//Aenderung der Visualisierung für das angeklickte Element.
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
//method find the triggered element and set a ColorFilter at the drawable background
//ex. visibleElement.getBackground().setColorFilter(ColorSpace.getHighlightColorFilter)
releaseListener.setColorFilter(event);
break;
case MotionEvent.ACTION_UP:
//method iterate to all elements and set a null ColorFilter at the drawable background
releaseListener.releaseColorFilter();
break;
}
return false;
}
}