2011-07-28 15 views
10

मुझे इसकी आवश्यकता है कि मैं एक ग्रिड व्यू के साथ एक छवि गैलरी को कार्यान्वित करना चाहता हूं। मैंने एंड्रॉइड डेवलपर वेबसाइट पर Hello gallery का उपयोग करने का प्रयास किया। लेकिन ग्रिड व्यू काम नहीं करता है।एंड्रॉइड में ग्रिडव्यू में छवि गैलरी को कैसे कार्यान्वित करें?

+0

आप एक गैलरी वस्तु जोड़ सकते हैं या GridView में तस्वीरें डाल ?, जाँच GridView ट्यूटोरियल करना चाहते हैं /hello-gridview.html) – jmsalcido

उत्तर

11

लेआउट के लिए इस XML का उपयोग करते हैं: gallery.xml

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

    <FrameLayout android:id="@+id/FrameLayout01" 
     android:layout_width="fill_parent" android:layout_height="fill_parent"> 
     <FrameLayout android:id="@+id/LinearLayout01" 
      android:layout_gravity="top" android:layout_height="50dp" android:layout_width="fill_parent"> 
      <TextView android:id="@+id/TextView01" 
       android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:layout_gravity="center_vertical" android:layout_marginLeft="30dp" android:gravity="center_vertical" android:drawableLeft="@drawable/photo_frame" android:textColor="@color/grey" android:text="@string/photogallery_txt"></TextView> 
      <Button android:layout_gravity="right" android:id="@+id/btnMoreInfo" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:textStyle="bold" android:background="@drawable/my_child_button" android:layout_width="100dp" android:layout_height="40dp" android:text="@string/moreinfo_txt"></Button> 
     </FrameLayout> 
     <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/gridview" android:layout_width="fill_parent" 
      android:layout_height="fill_parent" android:columnWidth="90dp" 
      android:numColumns="auto_fit" android:verticalSpacing="10dp" 
      android:horizontalSpacing="10dp" android:stretchMode="columnWidth" 
      android:gravity="center" android:layout_gravity="bottom" 
      android:layout_marginTop="50dp"></GridView> 
    </FrameLayout> 
</LinearLayout> 

गतिविधि फ़ाइल GalleryPage.java

public class GalleryPage extends Activity { 

    // private Integer[] mImageIds = {R.drawable.splash, R.drawable.splash, 
    // R.drawable.splash, R.drawable.splash, R.drawable.splash, 
    // R.drawable.splash, R.drawable.splash}; 

    private static Uri[] mUrls = null; 
    private static String[] strUrls = null; 
    private String[] mNames = null; 
    private GridView gridview = null; 
    private Cursor cc = null; 
    private Button btnMoreInfo = null; 
    private ProgressDialog myProgressDialog = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     CommonFunctions.setLanguage(getBaseContext()); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.gallery); 
     btnMoreInfo = (Button) findViewById(R.id.btnMoreInfo); 
     // It have to be matched with the directory in SDCard 
     cc = this.getContentResolver().query(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, 
       null); 

     // File[] files=f.listFiles(); 
     if (cc != null) { 

      myProgressDialog = new ProgressDialog(GalleryPage.this); 
      myProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      myProgressDialog.setMessage(getResources().getString(R.string.pls_wait_txt)); 
      //myProgressDialog.setIcon(R.drawable.blind); 
      myProgressDialog.show(); 

      new Thread() { 
       public void run() { 
        try { 
         cc.moveToFirst(); 
         mUrls = new Uri[cc.getCount()]; 
         strUrls = new String[cc.getCount()]; 
         mNames = new String[cc.getCount()]; 
         for (int i = 0; i < cc.getCount(); i++) { 
          cc.moveToPosition(i); 
          mUrls[i] = Uri.parse(cc.getString(1)); 
          strUrls[i] = cc.getString(1); 
          mNames[i] = cc.getString(3); 
          //Log.e("mNames[i]",mNames[i]+":"+cc.getColumnCount()+ " : " +cc.getString(3)); 
         } 

        } catch (Exception e) { 
        } 
        myProgressDialog.dismiss(); 
       } 
      }.start(); 
     gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(new ImageAdapter(this)); 

     gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
       Intent i = new Intent(GalleryPage.this, BigImage.class); 
       Log.e("intent : ", ""+position); 
       i.putExtra("imgUrls", strUrls); 
       i.putExtra("position", position); 
       startActivity(i); 
      } 
     }); 

     } 

     btnMoreInfo.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent i = new Intent(GalleryPage.this, ChildLogin.class); 
       startActivity(i); 
      } 
     }); 
    } 

    /** 
    * This class loads the image gallery in grid view. 
    * 
    */ 
    public class ImageAdapter extends BaseAdapter { 
     private Context mContext; 

     public ImageAdapter(Context c) { 
      mContext = c; 
     } 

     public int getCount() { 
      return cc.getCount(); 
     } 

     public Object getItem(int position) { 
      return null; 
     } 

     public long getItemId(int position) { 
      return 0; 
     } 

     // create a new ImageView for each item referenced by the Adapter 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.galchild, null); 

      try { 

       ImageView imageView = (ImageView) v.findViewById(R.id.ImageView01); 
       //imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
       // imageView.setPadding(8, 8, 8, 8); 
       Bitmap bmp = decodeURI(mUrls[position].getPath()); 
       //BitmapFactory.decodeFile(mUrls[position].getPath()); 
       imageView.setImageBitmap(bmp); 
       //bmp. 
       TextView txtName = (TextView) v.findViewById(R.id.TextView01); 
       txtName.setText(mNames[position]); 
      } catch (Exception e) { 

      } 
      return v; 
     } 
    } 

    @Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
     FlurryAgent.onStartSession(this, "***"); 
    } 
    // @Override 
    // protected void onStop() { 
    // TODO Auto-generated method stub 
    // super.onStop(); 
    // FlurryAgent.onEndSession(this); 

    // } 

    /** 
    * This method is to scale down the image 
    */ 
    public Bitmap decodeURI(String filePath){ 

     Options options = new Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(filePath, options); 

     // Only scale if we need to 
     // (16384 buffer for img processing) 
     Boolean scaleByHeight = Math.abs(options.outHeight - 100) >= Math.abs(options.outWidth - 100); 
     if(options.outHeight * options.outWidth * 2 >= 16384){ 
      // Load, scaling to smallest power of 2 that'll get it <= desired dimensions 
      double sampleSize = scaleByHeight 
       ? options.outHeight/100 
       : options.outWidth/100; 
      options.inSampleSize = 
       (int)Math.pow(2d, Math.floor(
       Math.log(sampleSize)/Math.log(2d))); 
     } 

     // Do the actual decoding 
     options.inJustDecodeBounds = false; 
     options.inTempStorage = new byte[512]; 
     Bitmap output = BitmapFactory.decodeFile(filePath, options); 

     return output; 
    } 
} 
+0

R.layout.galchild गुम है ... – Gomoku7

+20

'System.gc(); 'O_O –

+4

बहुत मलबे के लिए, -1 यह –

1

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

3

यह hello-gridview देखें। अधिक संदर्भ के लिए यह भी

मुझे लगता है कि ऊपर दिए गए लिंक आप के लिए बहुत उपयोगी होते हैं देखते हैं। और प्रश्न पोस्ट करने से पहले ध्यान रखें कि आप पहले android developer देखें। यह एंड्रॉइड के बारे में सभी जानकारी प्रदान करेगा। आप अभी भी किसी भी समस्या हो रही है, तो मुझे पता है

1

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

मेरा सुझाव है कि आप अपने काम के लिए Custom Camera Gallery library प्राप्त करें।

आपको ग्रिड व्यू में फोटो/वीडियो मिलेंगे जैसा आप चाहते हैं। [- Android डेवलपर हैलो GridView ट्यूटोरियल] (http://developer.android.com/guide/tutorials/views:

0
private static final int SELECT_PHOTO = 100; 
ImageView image; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    image = (ImageView) findViewById(R.id.imageView2); 
} 

public void pickAImage(View view) { 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, SELECT_PHOTO); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch (requestCode) { 
     case SELECT_PHOTO: 
      if (resultCode == RESULT_OK) { 
       Uri selectedImage = imageReturnedIntent.getData(); 
       InputStream imageStream = null; 

       try { 
        imageStream = getContentResolver().openInputStream(selectedImage); 
       } 
       catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 

       Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream); 
       image.setImageURI(selectedImage);// To display selected image in image view 
      } 
     } 
    } 
}