2012-02-20 1 views
0

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

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

ответ

0

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

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

// Edit: Некоторые указатели для кодирования вверх над предложением:

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

@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); 
} 

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

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), например. вы можете легко добавить подпись к изображениям. Это очень похоже на

+0

@ MH: Извините .. Его трудно для моего исходного кода? –

+0

Я добавил кучу фрагментов, чтобы проиллюстрировать предложенный ранее рабочий поток. Надеюсь, это поможет! –

+0

Спасибо .. Я упомянул меня использовать Viewpager вместо Gridview или что? –

 Смежные вопросы

  • Нет связанных вопросов^_^