Можно ли изменить положение изображений в виде сетки при перелистывании? - PullRequest
0 голосов
/ 20 февраля 2012

Я сам пытался загрузить изображения (из веб-сервиса) в gridview, и это было успешно сделано. Я использовал Lazy Adapter для загрузки всех изображений из веб-сервиса.

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

1 Ответ

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

Это может быть относительно легко реализовать с помощью ViewPager, я бы сказал.Рассмотрим последовательность действий следующим образом: когда пользователь выбирает элемент списка, передайте список всех изображений (например, их URI) и индекс, указывающий одно, выбранное для действия, содержащего ViewPager.Затем вы можете инициализировать адаптер ViewPager переданным списком и установить текущий элемент для отображения в индексе.

Посмотрите демонстрации API для получения дополнительных советов по использованию ViewPager или прочитайте сообщение в блоге на developers.android.com.Вместо того, чтобы передавать фрагменты как представления в ViewPager, просто создайте экземпляр ImageView - вы можете найти этот Q / A на SO полезным для некоторых указателей на то, как это сделать.Также, вероятно, не менее важно прочитать документацию на PagerAdapter.

// Редактировать: Некоторые указатели для кодирования приведенного выше предложения:

Пусть onItemClick создаст новое намерение, добавит релевантные данные для извлечения изображений как дополнительные, а также выбранный индекс и запустит действие:

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(this, ImageViewer.class);
    intent.putExtra(PAGE_POSITION, position);
    intent.putStringArrayListExtra(IMAGE_LIST, mImages)
    // or add a serializable, e.g. an ArrayList<T> with your POJOs
    intent.putExtra(IMAGE_LIST, mImages);
    startActivity(intent);
}

В вашем действии ImageViewer, содержащем ViewPager, извлеките вседополнительные функции и инициализируйте ViewPager для заданной позиции / индекса:

if (getIntent() != null && getIntent().getExtras() != null {
    mImagePosition = getIntent().getExtras().getInt(PAGE_POSITION, 0);
    mImageList = getIntent().getExtras().getStringArrayList(IMAGE_LIST);
    // or if you used Serializables
    mImageList = (ArrayList<T>) getIntent().getExtras().getSerializable(IMAGE_LIST);
    mViewPager.setAdapter(new ImagePagerAdapter());
    mViewPager.setCurrentItem(mImageIndex);
}

В адаптере ImagePader вы создаете экземпляры ImageView, содержащие изображения, которые вы хотите отобразить.Существует множество примеров, но в основе это будет выглядеть примерно так:

private class ImagePagerAdapter extends PagerAdapter {

    public int getCount() {
        return mImageList == null ? 0 : mImageList.size();
    }

    public Object instantiateItem(View pager, int position) {
        if (mInflater == null) mInflater = (LayoutInflater) container.getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = mInflater.inflate(R.layout.image_pager_item_layout, null, false);
        ImageView photoImageView = (ImageView) view.findViewById(R.id.photo_imageview);

        mImageLoader().loadImage(mImageList.get(position), photoImageView);

        ((ViewPager) pager).addView(view, 0);

        return view;
    }       

    public void destroyItem(View pager, int position, Object object) { 
        ((ViewPager) pager).removeView((View) object);
    }

    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    public void finishUpdate(View container) { }
    public void restoreState(Parcelable state, ClassLoader loader) { }
    public void startUpdate(View container) { }
    public Parcelable saveState() { return null; }
}

Обратите внимание, что я не проверял приведенный выше код, и при этом он не является завершенным.Например, я предполагаю, что вы знаете, как получить ссылку на LayoutInflater самостоятельно, и у вас есть «ленивый» загрузчик изображений, который асинхронно устанавливает изображение для ImageView.Файл image_pager_item_layout может быть просто ImageView, но также и более сложной иерархией представлений внутри ViewGroup (как с ListView и GridView), например, вы можете легко добавить подпись к изображениям.Это очень похоже на

...