Как отправить звонок для следующего, предыдущего просмотра в галерее android? - PullRequest
0 голосов
/ 10 августа 2011

Я использую Этот LoaderImageView в галерее. 1-й я показываю сетку для миниатюрного изображения. Когда пользователь нажимает на уменьшенное изображение, я получаю эту позицию и перехожу к новому действию, которое показывает галерею «LoaderImageView», которое получает большое изображение из Интернета, и в то же время показывает ProgressBar.

То, что я хочу сделать, - это когда пользователь выбирает изображение, тогда также должен быть b автоматический вызов для следующего, предыдущего просмотра. Собственно просмотр загрузить изображение.

Я пытаюсь сделать это с помощью OnItemSelectedListener ();

Есть код. Но это не работает нормально. Переход к 1-му изображению, когда я просто прокручиваю предыдущее. и тоже не работает по моей логике.

class BigImageAdapter extends BaseAdapter {

    DisplayMetrics displayMatrics;
    HashMap<String, Bitmap> hasLargeBitmap;
    SharedPhotosData sharedPhotosData;
    Context mContext;

    public BigImageAdapter(Context contex, SharedPhotosData photoData) {

        mContext = contex;
        displayMatrics = new DisplayMetrics();
        hasLargeBitmap = new HashMap<String, Bitmap>();
        getWindowManager().getDefaultDisplay().getMetrics(displayMatrics);
        sharedPhotosData = photoData;
    }

    public void recycleAllBitmap() {
        try {
            int i = 0;
            Collection<Bitmap> temp = hasLargeBitmap.values();
            for (Bitmap bitmap : temp) {
                if (bitmap != null) {
                    if (bitmap.isRecycled() == false) {
                        bitmap.recycle();
                        i++;
                    }
                }
            }
            Log.e("Recycled", "No of images recycled"+i);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public int getCount() {

        if (sharedPhotosData != null) {
            if (sharedPhotosData.photoData != null) {
                return sharedPhotosData.photoData.size();
            } else {
                Log.e(TAG, "sharedData.photoData is null");
            }
        } else {
            Log.e(TAG, "sharedData is null");
        }

        return 0;
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {

        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = null;
        try {
            MyData curData = null;
            curData = sharedPhotosData.photoData.get(position);
            if (convertView == null) {
                String imagePath = Environment.getExternalStorageDirectory().toString() + SMConstants.FILE_PATH_BASE
                        + SMConstants.S3Folders.PHOTO + curData.getLargeURLLocalPath() + "/" + SMConstants.FILE_NAME_PREFIX
                        + curData.getFileName();
                if (hasLargeBitmap.containsKey(imagePath) == false) {
                    rowView = new AsynImageView(hasLargeBitmap, PhotoGalleryActivity.this, curData);
                } else {
                    Bitmap image = hasLargeBitmap.get(imagePath);

                    ImageView mImageView = new ImageView(mContext);
                    mImageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,
                            Gravity.CENTER));
                    mImageView.setImageBitmap(image);
                    mImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                    mImageView.setAdjustViewBounds(true);
                    rowView = mImageView;
                }
                rowView.setLayoutParams(new Gallery.LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,
                        android.view.ViewGroup.LayoutParams.FILL_PARENT));
            } else {
                rowView = convertView;
            }

        } catch (Exception e) {
            Log.e("Exception", "LargeSlideShow.GetView  Message = " + e);
            e.printStackTrace();
        } catch (Error e) {
            Log.e("Error", "LargeSlideShow.GetView Message = " + e);
            e.printStackTrace();
        }
        return rowView;
    }
}

@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
    try {

        if (position - 1 >= 0) {
            myGalleryForLargeImage.setSelection((position - 1));
        }
        if (position + 1 < size) {
            myGalleryForLargeImage.setSelection((position + 1));
        }
    } catch (Exception e) {
        Log.e(TAG, "Exception = " + e.toString());
        e.printStackTrace();
    }
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {

}

1 Ответ

0 голосов
/ 10 августа 2011

Хорошо. Я обнаружил, что вместо того, чтобы делать «myGalleryForLargeImage.setSelection ((position - 1));» Это должно быть сделано. Как и сейчас, он пытается получить View и когда метод getView () вызывает его, инициирует этот запрос изображения.

@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
    try {

        if (position - 1 >= 0) {
            bigImageAdapter.getView(position-1, null, myGalleryForLargeImage);
        }
        if (position + 1 < size) {
            bigImageAdapter.getView(position+1, null, myGalleryForLargeImage);
        }
    } catch (Exception e) {
        Log.e(TAG, "Exception = " + e.toString());
        e.printStackTrace();
    }
}
...