Как отобразить галерею изображений в Android - PullRequest
0 голосов
/ 27 декабря 2011

Я новичок в разработке Android.У меня вопрос, я могу получить данные из базы данных sqlite.я конвертирую данные image в image.Мне нужно получить все данные изображений из базы данных и отобразить в виде галереи изображений.Есть ли способ сделать это.

Ниже мой код

   import java.util.ArrayList;
   import android.app.Activity;
   import android.content.Context;
   import android.content.Intent;
   import android.content.res.TypedArray;
   import android.database.Cursor;
   import android.database.sqlite.SQLiteDatabase;
   import android.graphics.Bitmap;
   import android.graphics.BitmapFactory;
   import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

public class task1images extends Activity  {
    private Integer[] myImageIds;
     private Gallery gallery;
     private ImageView imgView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.images);     
        SQLiteDatabase myDB = this.openOrCreateDatabase("test.db", SQLiteDatabase.OPEN_READWRITE, null);
        try{
            Cursor c = myDB.rawQuery("select photo from messages where task=1 and photo!=''"  , null);  


            //get the gallery items from the cursor
            ArrayList galleryList = new ArrayList();
            for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
                Integer gal;
                gal = c.getInt(c.getColumnIndex("photo"));
                galleryList.add(gal);               
            }
            System.out.println("size:::"+galleryList.size());
            myImageIds =(Integer[])galleryList.toArray(new Integer[galleryList.size()]);
            System.out.println(myImageIds[0]);
            imgView = (ImageView)findViewById(R.id.ImageView01);
            imgView.setImageResource(myImageIds[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(myImageIds[position]);
            }
            });
          }
          catch(Exception e) {
           Log.e("Error", "Error", e);
          } finally {
           if (myDB != null)
            myDB.close();
          }
    }
    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 myImageIds.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(myImageIds[position]);
            imgView.setLayoutParams(new Gallery.LayoutParams(80, 70));
            imgView.setScaleType(ImageView.ScaleType.FIT_XY);
            imgView.setBackgroundResource(GalItemBg);

            return imgView;
        }
    }

}

Ответы [ 3 ]

1 голос
/ 27 декабря 2011

Не нужно делать циклы, вы сделали адаптер и установите его в своей галерее http://saigeethamn.blogspot.com/2010/05/gallery-view-android-developer-tutorial.html

РЕДАКТИРОВАНИЕ:

в getView ()

cursor.moveToPosition(position);
imageView.setImageBitmap(getImageFromBLOB(cursor.getBlob(cursor.getColumnIndex("fieldname"))));

Метод: получить растровое изображение из BLOB-объекта

public Bitmap getImageFromBLOB(byte[] mBlob) {
    byte[] bb = mBlob;
    return BitmapFactory.decodeByteArray(bb, 0, bb.length);

}

Отредактировано:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        ImageView mImageView;
        cursor.moveToPosition(position);

            if(convertView==null)
            {
                LayoutInflater inf=mActivity.getLayoutInflater();
                vi=inf.inflate(R.layout.xxxxxx, null);

                mImageView=(ImageView)vi.findViewById(R.id.imgview_row);
                 vi.setTag(mImageView);
            }
             else
                 mImageView=(ImageView)vi.getTag();

            try {

                cursor.moveToPosition(position); 
                mImageView.image.setImageBitmap(AllMethod.getImageFromBLOB(cursor.getBlob(cursor.getColumnIndex("fieldname"))));

            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
        return vi;
    }
0 голосов
/ 27 декабря 2011

Чтобы прочитать изображение из базы данных, используйте что-то вроде этого:

Cursor c = <your db object>.query(...);
while (c.moveToNext())
{
 byte[] image = c.getBlob();
 Bitmap bmp = BitmapFactory.decodeByteArray(image, 0, image.length);
 imageView.setImageBitmap(bmp);
}
0 голосов
/ 27 декабря 2011

Вот пример, он будет переносить данные блоба в растровое изображение, и вам нужно будет установить их в виде изображения, которое определено в вашем костюме.

ByteArrayInputStream inputStream = new ByteArrayInputStream(cursor.getBlob(columnIndex));
Bitmap mBitmap = BitmapFactory.decodeStream(inputStream);

и пользовательский Gridview ::

1. Пример разработчика
2. Stealthcopter.com
3. Супер андроид боец ​​Пареш майани
4. Для пользовательского поиска ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...