2012-09-15 8 views
5

मैं एंड्रॉइड पर Pinterest ऐप में एक ग्रिड बनाना चाहता हूं।एंड्रॉइड में ग्रिड की तरह Pinterest

मैं एक AdapterView<ListAdapter> का विस्तार करना शुरू कर दिया है, लेकिन मैं बहुत सी बातें AbsListView विस्तार करने के लिए (ओवरस्क्रॉल प्रभाव उदाहरण के लिए) काम कर रहे हां, तो विचार को छोड़ने के बाद, अब मैं सोच रहा है कि यह एक ListView का विस्तार करने और layoutChildren() विधि ओवरराइड करने के लिए बेहतर है शुरू कर रहा हूँ नहीं कर सकता ।

आपको क्या लगता है?

धन्यवाद

+0

आप समाधान मिला? –

+0

समाधान यह है कि मैं एक कस्टम एडाप्टर व्यू घटक बना रहा हूं। जब मैं इसे पूरा कर दूंगा, तो मैं घटक को जिथूब पर साझा करूंगा। – Matroska

+0

धन्यवाद, कृपया अपना महान कोड यहां पोस्ट करें –

उत्तर

0

हम किसी भी बाहरी पुस्तकालय की आवश्यकता होगी, न लिया जाए इसके लिए एंड्रॉइड के मूल रीसाइक्लर व्यू रीसायकलर व्यू लेआउट मैनेजर

को बदलकर बस एक चिड़ियाघर चिनाई लेआउट को कार्यान्वित करता है
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); 
RecyclerAdapter adapter = new RecyclerAdapter(this); 
mRecyclerView.setAdapter(adapter); 

कूल। यह बहुत आसान है, लेकिन मेरे LinearLayout पर मार्जिन काम नहीं लग रहा था। तो यहाँ एक त्वरित फिक्स है।

SpacesItemDecoration decoration = new SpacesItemDecoration(16); 
mRecyclerView.addItemDecoration(decoration); 

SpacesItemDecoration वर्ग:

public class SpacesItemDecoration extends RecyclerView.ItemDecoration { 
private final int mSpace; 

public SpacesItemDecoration(int space) { 
    this.mSpace = space; 
} 

@Override 
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
    outRect.left = mSpace; 
    outRect.right = mSpace; 
    outRect.bottom = mSpace; 

    // Add top margin only for the first item to avoid double space between items 
    if (parent.getChildAdapterPosition(view) == 0) 
     outRect.top = mSpace; 
    } 
} 

Github link of example

my final Results

2

AntipodalWall एक तथाकथित "चिनाई" ग्रिड Android के लिए (बहुत Pinterest एप्लिकेशन की तरह) लेआउट प्रदान करने के लिए बनाया गया एक स्टैंडअलोन पुस्तकालय है।

चेक इस परियोजना AntipodalWall

+1

धन्यवाद। यह एक अच्छा जवाब प्रतीत होता है लेकिन दुर्भाग्यवश यह पुस्तकालय केवल एक साधारण व्यू ग्रुप प्रदान करता है जिसमें कोई एडाप्टर समर्थन नहीं है और कोई रीसाइक्लिंग क्षमता – Matroska

+0

अच्छा समाधान –

+0

सोचने का अनुमान है कि अगर आप कई छवियों को लोड कर रहे हैं, तो आप शुरुआत में विचारों को हटा सकते हैं और अधिक जोड़ सकते हैं स्क्रॉल करते समय समाप्त होने के विचार। –

6

मैं कॉपी करने और Android के StaggeredGridView अपडेट करके इस समाधान कर लिया है। https://github.com/maurycyw/StaggeredGridView। आप जिस प्रभाव को ढूंढ रहे हैं उसे बनाने के लिए बहुत अच्छा काम करने लगता है। इससे पहले कि मैंने एंड्रॉइड के स्रोत को एक अलग लाइब्रेरी (जिसे मैं काम कर रहा था) में कॉपी करने के खरगोश छेद से नीचे चला गया, जब तक कि मैंने अब प्रयोगात्मक StaggeredGridView नहीं देखा। यह मेरी पुरानी "ब्रिकव्यू" लाइब्रेरी प्रोजेक्ट की तुलना में बहुत आसान है इसलिए मैंने इसे बदल दिया।

+0

महान, मुझे बताएं कि यह कैसे चला जाता है! – Maurycy

+0

StaggeredGridView में कई समस्याएं हैं, और कुछ स्क्रॉलिंग के बाद स्क्रीन को घूर्णन करके आसानी से मिल सकते हैं। मैं एक अलग पुस्तकालय का उपयोग करने का सुझाव देते हैं। यदि आप चाहें तो मैंने एक नया सुझाव पोस्ट किया है। –

संबंधित मुद्दे