android - ग्रिडव्यू का उपयोग करके एसडीकार्ड पर विशिष्ट फ़ोल्डर से चित्र प्रदर्शित करना




gridview uri (4)

मैं एक ग्रिडव्यू बनाने की कोशिश कर रहा हूं जो एक विशिष्ट फ़ोल्डर से छवियों के साथ लोड होता है जो एसडीकार्ड पर रहता है फ़ोल्डर का रास्ता ज्ञात है, ("/ sdcard / pictures"), लेकिन उदाहरणों में मैंने ऑनलाइन देखा है I अनिश्चित है कि चित्र फ़ोल्डर के पथ को कैसे या कहां निर्दिष्ट किया जाए, मैं छवियों को लोड करना चाहता हूं। मैंने दर्जनों ट्यूटोरियल्स के माध्यम से पढ़ा है, यहां तक ​​कि डेवलपर। एंड्रॉइड डॉट कॉम पर हैलोग्रीड दृश्य ट्यूटोरियल पर उन ट्यूटोरियल मुझे सिखाती नहीं कि मैं क्या चाहता हूं।

मैंने अभी तक पढ़ा है हर ट्यूटोरियल या तो है:

ए) छवियों को एक रेस के रूप में / रेस फ़ोल्डर से बुलाया जाता है और उन्हें एक सरणी में डाल दिया जाता है, जो एसडीकार्ड का उपयोग नहीं कर रहा है

बी) मीडियास्टोर का इस्तेमाल करते हुए एसडीकार्ड पर सभी चित्रों को एक्सेस किया गया था लेकिन निर्दिष्ट नहीं कि फ़ोल्डर को पथ कैसे सेट करना है, जिसे मैं छवियों को प्रदर्शित करना चाहता हूं

या

सी) bitmapfactory का उपयोग करने का सुझाव है, जो मुझे उपयोग करने के लिए थोड़ी सी सुराग नहीं है।

अगर मैं इस बारे में गलत तरीके से जा रहा हूं, तो कृपया मुझे बताएं और मुझे उचित तरीके से निर्देशित करें कि मैं क्या करने की कोशिश कर रहा हूं।


आपके मामले में बीटामा फैक्ट्री जाने का एक अच्छा तरीका हो सकता है उदाहरण:

File dir = new File( "/sdcard/pictures" );    
String[] fileNames = dir.list(new FilenameFilter() { 
  boolean accept (File dir, String name) {
      if (new File(dir,name).isDirectory())
         return false;
      return name.toLowerCase().endsWith(".png");
  }
});
for(string bitmapFileName : fileNames) {
  Bitmap bmp = BitmapFactory.decodeFile(dir.getPath() + "/" + bitmapFileName);
  // do something with bitmap
}

यह परीक्षण करने का समय नहीं है लेकिन काम करना चाहिए ;-)


इस लिंक को पढ़ें: http://androidsamples.blogspot.com/2009/06/how-to-display-thumbnails-of-images.html
यह दिखाता है कि कैसे दोनों मध्यस्थता और बिटमैपफैक्टरी का उपयोग करें

जिस तरह से आपको चुना जाना चाहिए, उस पर निर्भर करता है कि आपको वास्तव में क्या चाहिए। अगर आपके पास छवियों का एक स्थिर सेट है, तो उन्हें डिज़ाइन करने के लिए बेहतर विचार है, मुझे लगता है कि इस तरह से यह तेज़ है और आप एसडी कार्ड पर भरोसा नहीं करते हैं, जिसे हटाया जा सकता है, दूषित हो सकता है या फ़ाइलों का नाम बदलकर / हटाया जा सकता है

यदि छवियाँ गतिशील हैं, तो मध्यस्थता या बिटमैप फैक्टरी का उपयोग करें। लेकिन ध्यान रखें कि छवियों को सरणी या कुछ चीज़ों में डालने से यह काफी स्मृति खपत होती है, इसलिए आप अपूर्ण अपवाद अपवाद समाप्त कर सकते हैं


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

सुनिश्चित करें कि आपके पास कक्षा स्तर पर परिभाषित स्तंभ अनुक्रमणिका के लिए एक कर्सर और पूर्णांक है, ताकि गैलरी का छवि एडाप्टर उन तक पहुंच सके:

private Cursor cursor;
private int columnIndex;

सबसे पहले, फ़ोल्डर में स्थित छवि आईडी का एक कर्सर प्राप्त करें:

Gallery g = (Gallery) findViewById(R.id.gallery);
// request only the image ID to be returned
String[] projection = {MediaStore.Images.Media._ID};
// Create the cursor pointing to the SDCard
cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        projection, 
        MediaStore.Images.Media.DATA + " like ? ",
        new String[] {"%myimagesfolder%"},  
        null);
// Get the column index of the image ID
columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
g.setAdapter(new ImageAdapter(this));

फिर, गैलरी के लिए ImageAdapter में, प्रदर्शित करने के लिए थंबनेल प्राप्त करें:

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView i = new ImageView(context);
    // Move cursor to current position
    cursor.moveToPosition(position);
    // Get the current value for the requested column
    int imageID = cursor.getInt(columnIndex);
    // obtain the image URI
    Uri uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
    String url = uri.toString();
    // Set the content of the image based on the image URI
    int originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
    Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(),
                    originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
    i.setImageBitmap(b);
    i.setLayoutParams(new Gallery.LayoutParams(150, 100));
    i.setScaleType(ImageView.ScaleType.FIT_XY);
    i.setBackgroundResource(mGalleryItemBackground);
    return i;
}

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


ऐसा लगता है कि आप कस्टम गैरी चाहते हैं, यह आपके लिए बहुत समय लगेगा,

मेरा सुझाव है कि आप अपने काम के लिए कस्टम कैमरा गैलरी प्राप्त करें

आपको ग्रिड व्यू में फोटो / वीडियो मिलेगा जैसे आप चाहते हैं।