2011-01-06 6 views
1

Ich habe Galerie von Bildern im Emulator durch statische (dh Bilder aus drawable Ordner) gemacht. Jetzt muss ich einige Bilder in die Liste der Galerie dynamisch aus dem lokalen Pfad hinzufügen (für ex.from E: /anim.jpeg ähnlich) .Wie kann ich das tun Dank ..Galerie Bilder dynamisch in Android hinzufügen

Meine Galerie Code ist unten dargestellt ..

public class GalleryAct extends Activity { 

private Gallery gallery; 
private ImageView imgView; 

private Integer[] Imgid = { 
     R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7, 
     R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5, R.drawable.img6, R.drawable.img7 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    imgView = (ImageView)findViewById(R.id.ImageView01);  
    imgView.setImageResource(Imgid[0]); 

    gallery = (Gallery) findViewById(R.id.examplegallery); 
    gallery.setAdapter(new AddImgAdp(this)); 

    gallery.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      imgView.setImageResource(Imgid[position]); 
     } 
    }); 

} 

public class AddImgAdp extends BaseAdapter { 
    int GalItemBg; 
    private Context cont; 

    public AddImgAdp(Context c) { 
     cont = c; 
     TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme); 
     GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0); 
     typArray.recycle(); 
    } 

    public int getCount() { 
     return Imgid.length; 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imgView = new ImageView(cont); 

     imgView.setImageResource(Imgid[position]); 
     imgView.setLayoutParams(new Gallery.LayoutParams(80, 70)); 
     imgView.setScaleType(ImageView.ScaleType.FIT_XY); 
     imgView.setBackgroundResource(GalItemBg); 

     return imgView; 
    } 
} 

} 

Antwort

4

den Dateipfad schreiben, wo das Bild ist Gerettet.

Environment.getExternalStorageDirectory() gibt den Pfad der SD-Karte an.

File f1 = new File(Environment.getExternalStorageDirectory() 
       + File.separator + "test2.png"); 


BitmapFactory.Options o = new BitmapFactory.Options(); 
o.inJustDecodeBounds = true; 
Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

imgView.setImageBitmap(bitmap); 

Wenn Ihr Bild zu groß ist, wird die Größe der Bitmap als Fehler angezeigt, so dass Sie unterhalb des Codes schreiben müssen, um das Bild zu skalieren. Übergeben Sie die Datei in folgenden Funktion

Bitmap bitmap = decodeFile(f1); 
imgView.setImageBitmap(bitmap); 

private Bitmap decodeFile(File f) { 
    try { 
     // Decode image size 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(new FileInputStream(f), null, o); 

     // The new size we want to scale to 
     final int REQUIRED_SIZE = 150; 

     // Find the correct scale value. It should be the power of 2. 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 
     while (true) { 
      if (width_tmp/2 < REQUIRED_SIZE || height_tmp/2 < REQUIRED_SIZE) 
       break; 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     // Decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 

    } catch (FileNotFoundException e) { 
    } 
    return null; 
} 
+0

Danke für Ihre Antwort shah. – sanjay

+0

Hi..Ich überprüfte mit obiger Antwort.Thanks.But es intern Bilder von einem Pfad und zeigte die Bilder zu den Zuschauern.Aber ich muss eine Schaltfläche zum Durchsuchen erstellen.Wenn Benutzer auf diese Schaltfläche auf Emulator.A ein neues Popup-Fenster klickt sollte open.it eine liste von bildern im ziehbaren ordner der gleichen anwendung zeigen.dann muss ich ein bild aus diesem wählen.es sollte in die galerie liste eingefügt werden, um angezeigt zu werden (zB wie datei anhängen auf e-mails) .Ist es möglich Danke in adv. – sanjay

3

In Ihrem Fall können Sie versuchen, Ihre Bildanordnung eine dynamische Liste, ex machen: Arraylist. Nach dem Eintreffen des neuen Elements, fügen Sie es zur Liste hinzu und rufen Sie notifyDataSetChanged() (Methode des Adapters) auf, und Ihre Galerie-Liste wird aktualisiert.

Abhängig von Ihrem Fall, fand ich, dass es besser ist, AsyncTask hier zu verwenden, um die Liste zu aktualisieren, und notifyDataSetChanged aufzurufen.

Die Adapterklasse würde sieht in ähnlicher Weise auf diese

public class AddImgAdp extends BaseAdapter { 
    int GalItemBg; 
    ArrayList<Bitmap> bitmapList; 
    private Context cont; 

    public AddImgAdp(Context c, ArrayList<Bitmap> bitmapList) { 
     cont = c; 
     TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme); 
     GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0); 
     typArray.recycle(); 
     this.bitmapList = bitmapList; 
    } 

    public int getCount() { 
     return bitmapList.size(); 
    } 

    public Object getItem(int position) { 
     return bitmapList.get(position); 
    } 

    public long getItemId(int position) { 
     return bitmapList.get(position); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imgView = new ImageView(cont); 

     // imgView.setImageResource(Imgid[position]); 
     imgView.setImageBitmap(bitmapList.get(position)); 

     imgView.setLayoutParams(new Gallery.LayoutParams(80, 70)); 
     imgView.setScaleType(ImageView.ScaleType.FIT_XY); 
     imgView.setBackgroundResource(GalItemBg); 

     return imgView; 
    } 
} 

Lassen Sie mich wissen, ob Fehler, ich bin Art und Weise auf IDE abhängig.