Android: загрузка изображения из определенного каталога - PullRequest
1 голос
/ 27 июля 2011

У меня есть галерея, которая отображает миниатюры изображений в пользовательских каталогах. Галерея отображается нормально, но я не могу открыть полное изображение, нажав на миниатюру. Мой прослушиватель кликов [не функционирует] ниже

    try {
        if (LoadImageFiles() == true) {
            GridView imgGallery = (GridView) findViewById(R.id.gallery);

            final ImageAdapter ia = new ImageAdapter(PersonMedia.this);
            imgGallery.setAdapter(ia);

                            // Set up a click listener
            imgGallery.setOnItemClickListener(new OnItemClickListener() {

                  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                        String imgPath = paths.get(position);

                        Intent intent = new Intent(getApplicationContext(), ViewImage.class);
                        intent.putExtra("filename", imgPath);
                        startActivity(intent);
                  }
            });
        }
    } catch (Exception ex) {
        Log.e("PersonMedia.LoadPictures", ex.getMessage());
    }

Вот как заполняется галерея

//Declare a module level hashtable
private Hashtable<Integer, String> paths;



private boolean LoadImageFiles() {

try{
    mySDCardImages = new Vector<ImageView>();

    paths = new Hashtable<Integer, String>();

    fileCount = 0;

    sdDir = new File(imageDirectory);
    sdDir.mkdir();

    if (sdDir.listFiles() != null) 
    {
        File[] sdDirFiles = sdDir.listFiles();

        if (sdDirFiles.length > 0) 
        {               
            for (File singleFile : sdDirFiles) 
            {                   
                Bitmap bmap = decodeFile(singleFile);
                BitmapDrawable pic = new BitmapDrawable(bmap);

                ImageView myImageView = new ImageView(PersonMedia.this);                    
                myImageView.setImageDrawable(pic);
                myImageView.setId(mediaCount);      

                paths.put(fileCount, singleFile.getAbsolutePath());

                mySDCardImages.add(myImageView);

                mediaCount++;
                fileCount ++;
            }
         }
       }
     }
       catch(Exception ex){ Log.e("LoadImageFiles", ex.getMessage()); }

     return (fileCount > 0);
}

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Мне удалось решить эту проблему с помощью хэш-таблицы для сохранения положения и пути к изображениям при загрузке миниатюр.Ниже приведены 2 соответствующих фрагмента кода

//Where the gallery is populated and the onclick is defined

private void PopulateGallery() {

    try {
        if (LoadImageFiles() == true) {
            GridView imgGallery = (GridView) findViewById(R.id.gallery);

            imgGallery.setAdapter(new ImageAdapter(PersonMedia.this));

            // Set up a click listener
            imgGallery.setOnItemClickListener(new OnItemClickListener() {

                  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                        String imgPath = paths.get(position);

                        Intent intent = new Intent(getApplicationContext(), ViewImage.class);
                        intent.putExtra("filename", imgPath);
                        startActivity(intent);
                  }
            });
        }
    } catch (Exception ex) {
        Log.e("PersonMedia.LoadPictures", ex.getMessage());
    }

}


//Where the images are loaded. You'll need to create a module level hashtable

private Hashtable<Integer, String> paths;

private boolean LoadImageFiles() {

try{
    mySDCardImages = new Vector<ImageView>();

    paths = new Hashtable<Integer, String>();

    fileCount = 0;

    sdDir = new File(imageDirectory);
    sdDir.mkdir();

    if (sdDir.listFiles() != null) 
    {
        File[] sdDirFiles = sdDir.listFiles();

        if (sdDirFiles.length > 0) 
        {               
            for (File singleFile : sdDirFiles) 
            {                   
                Bitmap bmap = decodeFile(singleFile);
                BitmapDrawable pic = new BitmapDrawable(bmap);

                ImageView myImageView = new ImageView(PersonMedia.this);                    
                myImageView.setImageDrawable(pic);
                myImageView.setId(mediaCount);      

                paths.put(fileCount, singleFile.getAbsolutePath());

                mySDCardImages.add(myImageView);

                mediaCount++;
                fileCount ++;
            }
         }
       }
     }
       catch(Exception ex){ Log.e("LoadImageFiles", ex.getMessage()); }

     return (fileCount > 0);
}
0 голосов
/ 27 июля 2011

У ваших изображений есть расширения, такие как .jpg или .png?Я не совсем уверен, но похоже, что вы ищете строковую версию вашего personId без расширения файла.

Пожалуйста, исправьте меня, если я ошибаюсь.

Также, пожалуйста, опубликуйте более подробную информацию, например, ошибки, которые вы получаете.

Обновленный ответ ниже.

Используйте View.setTag(Object), когда вы добавляете элементы в ListViewугадывание).Вы можете вызвать что-то вроде следующего:

view.setTag("imgFile.jpg");

А затем изнутри вашего onClickListener, просто сделайте это:

String img = (String) getTag();
...