2016-09-01 2 views
0

Ich benutze ein ListView mit verschiedenen "gestylten" Komponenten. Die erste und die zweite Komponente aus dem Bild verwenden einen programmatisch gezeichneten Hintergrund. Das dritte und vierte Element hat einen Neun-Patch-Hintergrund. Wenn ich auf ein Element klicke, koloriert der Selektor aus der ListView und bedeckt das ausgewählte Element.Lücke zwischen dem Rand und dem Neun-Patch-Hintergrund eines Listenelements (LinearLayout)

Mein Problem ist, dass ich eine Lücke zwischen Grenze und Neun-Patch-Hintergrund habe. Gibt es eine Lösung, um diese Lücke zu beseitigen?

Screenshot with selected second list element (programmatically background)

Screenshot with selected fourth list element (nine-patch background)

Antwort

0

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; 
    } 

} 
Verwandte Themen