Заполнить Android Gallery из путей к файлам изображений? - PullRequest
0 голосов
/ 31 января 2012

У меня есть несколько изображений, которые сохраняются в каталоге на устройстве Android при запуске приложения - я хотел бы иметь возможность отображать эти изображения в Галерее, но до сих пор я не смог этого сделать.

Я следовал примеру кода галереи здесь , но вместо путей к файлам он использует идентификаторы ресурсов для рисования. Я нашел это решение , которое похоже на то, что я ищу, за исключением того, что оно использует ImageView вместо галереи.

Таким образом, код, использующий ImageView, будет выглядеть примерно так:

File imgFile = new  File(“/data/data/com.myproject.example/files/someImage.png”);
if(imgFile.exists()){

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest);
    myImage.setImageBitmap(myBitmap);

}

Приведенный выше код работает, но я не уверен, как это сделать с помощью галереи. Я искал ответы и пробовал разные вещи, но я - новичок в разработке для Android, и я чувствую, что немного над головой.

Любая помощь приветствуется. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Что вам нужно сделать, это что-то вроде этого:

public ImageAdapter(Context c, int itemId) {
    context = c;

    imgArr = GlobalStore.getItem(itemId).getPhotos();
    TypedArray attr = context.obtainStyledAttributes(R.styleable.HelloGallery);
    mGalleryItemBackground = attr.getResourceId(R.styleable.HelloGallery_android_galleryItemBackground, 0);
    attr.recycle();
}

Как вы можете видеть, это в основном копия из учебника Галереи. В конструктор переменная imgArr загружается массив имен файлов JPG. Например, они были прочитаны из базы данных.

Тогда в функции getView у вас есть что-то вроде этого ...

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


    String tmpStr = appContext.getFilesDir() + File.separator + "photos" + File.separator + imgArr.get(position);
    Bitmap bitmap = BitmapFactory.decodeFile(tmpStr);
    imageView.setImageBitmap(bitmap);
    imageView.setLayoutParams(new Gallery.LayoutParams(350, 300));
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setBackgroundResource(mGalleryItemBackground);

    return imageView;
}

Как вы можете видеть, getFilesDir () получает данные о вашем приложении, где хранятся файлы, а затем давайте представим, что все фотографии находятся в каталоге "photos", вы строите путь и прикрепляете имя файла из imgArr массив. Так как это вызывается для каждой фотографии, вы просто используете переданную переменную position .

Если у вас нет массива фотографий, то, возможно, можно построить его, прочитав каталог, в котором вы храните фотографии, загрузите все имена файлов в массив и затем сделайте это.

Затем вы делаете все остальное на стороне галереи, как в учебнике по галерее.

0 голосов
/ 01 февраля 2012

В принципе, я думаю, вам просто нужно соединить два примера.

Используйте пример HelloGallery для начала, однако вы хотите изменить код внутри getView() метода ImageAdapter для вызова setImageBitmap() на ImageView вместо setImageResource().

Вам потребуется массив / набор путей к файлам изображений, которые вы хотите загрузить.

...