2010-09-20 20 views
6

मैं एंड्रॉइड के लिए नया हूं और मैं एक छवि गैलरी बनाना चाहता हूं जहां प्रत्येक कॉलम एक श्रेणी है, और उपयोगकर्ता लंबवत और क्षैतिज दोनों स्क्रॉल कर सकते हैं।दोनों क्षैतिज और लंबवत स्क्रॉलिंग के साथ 2-आयाम छवि गैलरी कैसे बनाएं?

मुझे छवियों की सूची को प्रदर्शित करने के तरीके के बारे में एक उपयोगी पोस्ट मिली here। मैं सोच रहा हूं कि गैलरी दृश्य के अंदर छवि की घोंसला सूचियों के लिए संभव है?

उत्तर

0

आपको GridView की आवश्यकता हो सकती है। ए ग्रिड व्यू एक व्यू ग्रुप है जो दो-आयामी, स्क्रोल करने योग्य ग्रिड में आइटम प्रदर्शित करता है। एक सूची एडाप्टर का उपयोग कर ग्रिड आइटम स्वचालित रूप से लेआउट में डाले जाते हैं।

+2

मुझे लगता है कि कोशिश की, लेकिन ऐसा लगता है GridView क्षैतिज स्क्रॉल का समर्थन नहीं करता है: http: //stackoverflow.com/questions/ 29 9 7818/ग्रिडव्यू-साथ-क्षैतिज-स्क्रॉल –

7

एक गैलरी को एक कॉलम और कॉलम आकार के साथ एक दृश्य रखें जिसमें मूल दृश्य (या उस प्रभाव से कुछ) भरने के लिए सेट किया गया है। ग्रिड व्यू में एक गैलरी रखें और लेआउटपैम्स में अपनी ऊंचाई को उन ड्रॉबल्स/दृश्यों की ऊंचाई पर सेट करें जिन्हें आप उन पर कब्जा करना चाहते हैं। आपको बस इतना करना है कि ग्रिड व्यू में सभी को स्थानांतरित करने के लिए एक गैलरी स्थानांतरित हो जाती है। मैं नीचे कोड पोस्ट करूंगा। नोट: मैंने जो कोड किया है वह अवधारणा का एक परीक्षण है जो काम करता है, मैंने बस इसे अपने फोन पर करने की कोशिश की। हालांकि, यह चमकदार नहीं है। जैसा कि मैं इस पर काम करना जारी रखता हूं, मैं इसे अच्छे दिखने के लिए कोड अपडेट कर सकता हूं।

~ Aedon :)

public class Test extends Activity { 
    /** Called when the activity is first created. */ 
    GridView gv; 
    Gallery g[] = new Gallery[3]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     gv = (GridView) findViewById(R.id.gridview); 
     gv.setAdapter(new GAdapter()); 
     for (int i = 0; i < g.length; i++) { 
      g[i] = new Gallery(this); 
      g[i].setAdapter(new GGAdapter()); 
      g[i].setOnTouchListener(new OnTouchListener() { 
       @Override 
       public boolean onTouch(View arg0, MotionEvent ev) { 
        if (ev.getAction() == MotionEvent.ACTION_UP) { 
         for (int j = 0; j < g.length; j++) { 
          g[j].setSelection(((AdapterView) arg0) 
            .getSelectedItemPosition()); 
         } 
        } 
        return false; 
       } 
      }); 
     } 
    } 

    private class GAdapter extends BaseAdapter { 
     public GAdapter() { 
     } 

     @Override 
     public int getCount() { 
      return g.length; 
     } 

     @Override 
     public Object getItem(int pos) { 
      return pos; 
     } 

     @Override 
     public long getItemId(int pos) { 
      return pos; 
     } 

     @Override 
     public View getView(final int pos, View convertView, ViewGroup parent) { 

      g[pos].setLayoutParams(new GridView.LayoutParams(gv.getWidth(), gv 
        .getHeight())); 
      return g[pos]; 
     } 
    } 

    private class GGAdapter extends BaseAdapter { 
     int[] images = new int[] { R.drawable.icon, R.drawable.icon, 
       R.drawable.icon }; 

     public GGAdapter() { 
     } 

     @Override 
     public int getCount() { 
      return images.length; 
     } 

     @Override 
     public Object getItem(int pos) { 
      return pos; 
     } 

     @Override 
     public long getItemId(int pos) { 
      return pos; 
     } 

     @Override 
     public View getView(final int pos, View convertView, ViewGroup parent) { 
      ImageView mIV = new ImageView(Test.this); 
      mIV.setBackgroundResource(images[pos]); 
      mIV.setLayoutParams(new Gallery.LayoutParams(gv.getWidth(), gv 
        .getHeight()/3)); 
      return mIV; 
     } 
    } 
} 

और मेरे xml फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center" 
     android:horizontalSpacing="10dp" 
     android:numColumns="1" 
     android:verticalSpacing="10dp" /> 

</LinearLayout> 
+0

यह एक महान उत्तर की तरह दिखता है, लेकिन यह कोड पर स्वरूपण की कमी के कारण पूरी तरह से अपठनीय है। अपने कोड ब्लॉक को 4 रिक्त स्थान से इंडेंट करना सुनिश्चित करें ताकि स्टैक ओवरफ़्लो इसे कोड के रूप में प्रदर्शित कर सके। एक बार ऐसा करने के बाद निश्चित रूप से एक अच्छा दिखने वाला जवाब! –

+0

ग्रेट उत्तर। आप बहुत समय बचाते हैं। – Smeet