2016-04-17 12 views
0

Ich versuche, mehrere horizontale Linien auf einem RecyclerView-Hintergrund zu zeichnen. Diese Zeilen müssen genau positioniert sein, da es eine Liste von Elementen gibt, die zwischen ihnen passen müssen. Ich könnte einfach die Zeilen zu jedem Element hinzufügen, aber ich brauche diese Zeilen, auch wenn der Liste keine Elemente hinzugefügt wurden.Zeichnen Sie mehrere Linien auf einem RecyclerView-Hintergrund

Wie kann ich Linien im Hintergrund zeichnen? (Ich kann es nicht von der .xml) Danke für Ihre Zeit!

Example image

+0

Können Sie ein Bild posten? –

+0

Ich habe ein Beispielbild gepostet! – Starivore

Antwort

0

Es sieht aus wie Sie Liste Teiler zeichnen möchten. Ich glaube, Sie ItemDecoration

verwenden möchten, wenn ein Dekorateur Schreiben Sie sicher, dass Sie für translationY Konto vornehmen möchten (Griffe Element hinzufügen/entfernen Animation) und Artikel Offsets von anderen Dekorationen (zB layoutManager.getDecoratedBottom (Ansicht))

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 
    private static final int[] ATTRS = new int[]{ 
      android.R.attr.listDivider 
    }; 

    private Drawable mDivider; 

    public DividerItemDecoration(Context context) { 
     final TypedArray a = context.obtainStyledAttributes(ATTRS); 
     mDivider = a.getDrawable(0); 
     a.recycle(); 
    } 

    @Override 
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { 
     int left = parent.getLeft(); 
     int right = parent.getRight(); 
     RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); 

     int childCount = parent.getChildCount(); 
     for (int i = 0; i < childCount; i++) { 
      View child = parent.getChildAt(i); 
      int ty = (int) (child.getTranslationY() + 0.5f); 
      int top = layoutManager.getDecoratedBottom(child) + ty; 
      int bottom = top + mDivider.getIntrinsicHeight(); 
      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
     } 
    } 
} 


recyclerView.addItemDecoration(new DividerItemDecoration(context)); 
+0

funktioniert wie ein Charme! aber ich muss alle gezeichneten Linien angezeigt haben, selbst wenn ich nicht alle recycleview Elemente erstellt habe. Ich muss grundsätzlich eine Notizblockseite nachahmen. Wie kann ich das tun und die RecycleView Liste beibehalten? Vielen Dank für Ihre Zeit! – Starivore

+0

Sie müssten nach dem ersten eine zweite Schleife hinzufügen, die die Teiler bis zum Ende fortsetzt> = parent.bottom(); – cyroxis

+0

Vielen Dank, es hat mit unten gearbeitet <= parent.getBottom! – Starivore

Verwandte Themen