2015-03-24 12 views
10

Ben GridLayout için bu ItemDecoration sınıfını kullanıyorum ->https://github.com/devunwired/recyclerview-playground/blob/master/app/src/main/java/com/example/android/recyclerplayground/GridDividerDecoration.javaRecyclerView'da İlk Satır Nasıl AtılırGridLayout için Öğe Dekorasyonu?

Ama sorun, GridLayout benim ilk satır bir görüntü ve ben 2.

Sen uyarınca benim ekranını görüntüleyebilir yayılma alanını ayarlamak aşağıdaki ekran görüntüsü: ItemDecoration Görüntü üzerine çekmedi ki

Screenshot

Nasıl ilk satırı atlamak için? Aşağıda

Ben ItemDecoration eklemek için kullanıyorum kodudur: - imageview null ise sadece çizmek Ben de hiç GridDividerDecoration sınıfında drawHorizontal yöntemini modifiye

mRecyclerView.setHasFixedSize(true); 
mLayoutManager = new GridLayoutManager(getActivity(), 2); 
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
     return position == 0 ? 2 : 1; 
    } 
}); 
mRecyclerView.setLayoutManager(mLayoutManager); 
mAdapter.setHighlightsCallbacks(this); 
mRecyclerView.setAdapter(mAdapter); 
mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
mRecyclerView.addItemDecoration(new GridDividerDecoration(getActivity())); 

ama hala çalışmıyor: -

public void drawHorizontal(Canvas c, RecyclerView parent) { 

    final int top = parent.getPaddingTop(); 
    final int bottom = parent.getHeight() - parent.getPaddingBottom(); 

    final int childCount = parent.getChildCount(); 

    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     if (child.findViewById(R.id.home_imgHeader) == null) { 
      final RecyclerView.LayoutParams params = 
        (RecyclerView.LayoutParams) child.getLayoutParams(); 
      final int left = child.getRight() + params.rightMargin + mInsets; 
      final int right = left + mDivider.getIntrinsicWidth(); 
      mDivider.setBounds(left, top, right, bottom); 
      mDivider.draw(c); 
     } 
    } 
} 

Herhangi bir yardım?

+0

Aşağı oy için herhangi bir sebep var mı? – skycrew

cevap

3

Öğelerinizin tek tek katı arka planlara sahip olmadığı varsayıldığında (ör. Beyaz renk ana öğeden geliyorsa), en kolay düzeltme kodu onDrawOver()'dan onDraw()'a taşımak olacaktır. Bu, alt görünümlerinizin altındaki kılavuz çizgilerini çizecek ve başlık resminin altında gizlenecektir. Aksi takdirde, kullandığınız kod, ızgara çizgilerinin her zaman drawHorizontal() (görünüm top hiçbir zaman değişmeyen bir değerdir) görünümün en üstüne çekildiğini varsayar. İlk öğenin altını hesaplamak ve orada çizim yapmaya başlamak için bu işlevi değiştirmeniz gerekir. Şunlar gibi:

public void drawHorizontal(Canvas c, RecyclerView parent) { 
    final View topView = parent.findViewHolderForAdapterPosition(0); 
    int viewBottom = -1; 
    if (topView != null) { 
     final RecyclerView.LayoutParams params = 
      (RecyclerView.LayoutParams) child.getLayoutParams(); 
     viewBottom = child.getBottom() + params.bottomMargin + mInsets; 
    } 

    final int top = viewBottom > parent.getPaddingTop() ? viewBottom : parent.getPaddingTop(); 
    final int bottom = parent.getHeight() - parent.getPaddingBottom(); 

    … /* Remaining Code */ 
} 
+0

her iki çözüm onDrawOver'dan onDrawO'ya geçiş yapar ve drawHorizontal yöntemi mükemmel çalışır. Teşekkürler @Devunwired Ben android hala acemi. – skycrew

İlgili konular