Frage

Ich habe Galerie von Bildern gemacht auf Emulator durch statische (dh Bilder von drawable Ordner) angezeigt .Jetzt Ich brauche ein paar Bilder in die Liste der Galerie hinzuzufügen, dynamisch aus dem lokalen Pfad (für ex.from E : /anim.jpeg ähnlich) .Wie ich, dass Dank tun kann ..

Meine Galerie Code unten ..

gezeigt
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;
    }
}

}
War es hilfreich?

Lösung

Schreiben Sie den Dateipfad, wo das Bild gespeichert wird.

Environment.getExternalStorageDirectory () gibt Weg des sdcard.

  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 ist zu groß Größe als Bitmap Fehler geben wird, so dass Sie auf Resize Bild unten Code zu schreiben. Übergeben Sie die Datei in unten 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;
}

Andere Tipps

In Ihrem Fall können Sie versuchen, Ihren Bild-Array eine dynamische Liste machen, ab: Arraylist. Nach der Ankunft neuer Artikel, fügen Sie ihn in der Liste, und rufen notifyDataSetChanged () (Methode des Adapters), und die wird Galerie-Liste aktualisiert.

hängt von Ihrem Fall, ich fand, dass es besser ist, AsyncTask zu verwenden hier die Liste zu aktualisieren, und Call notifyDataSetChanged.

Die Adapterklasse würde Aussehen ähnlich wie das

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top