سؤال

لقد قمت بمعرض الصور المعروضة على المحاكي بواسطة Static (أي الصور من drawable مجلد). الآن أحتاج إلى إضافة بعض الصور إلى قائمة المعرض ، ديناميكيًا من المسار المحلي (لـ ex.from e: /anim.jpeg مثل هذا). كيف يمكنني فعل ذلك؟ شكرا ..

يظهر رمز المعرض الخاص بي أدناه ..

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

}
هل كانت مفيدة؟

المحلول

اكتب مسار الملف حيث يتم حفظ الصورة.

البيئة.

  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);

إذا كانت صورتك كبيرة جدًا من حجم النقط ، فستقدم خطأً ، لذلك يجب عليك كتابة التعليمات البرمجية أدناه لتغيير حجم الصورة. تمرير الملف في الوظيفة أدناه

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

نصائح أخرى

في حالتك ، يمكنك محاولة جعل صفيف الصور الخاص بك قائمة ديناميكية ، على سبيل المثال: ArrayList. عند وصول العنصر الجديد ، أضفه إلى القائمة ، واتصل NotifyDatAstechanged () (طريقة المحول) ، وسيتم تحديث قائمة المعرض الخاصة بك.

يعتمد على قضيتك ، وجدت أنه من الأفضل استخدام Asynctask هنا لتحديث القائمة ، والاتصال NotifyDataStechanged.

سوف تبدو فئة المحول بشكل مشابه لهذا

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

اسمحوا لي أن أعرف إذا كانت أي أخطاء ، فأنا أتوقف على IDE.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top