2012-12-10 4 views
58

Я использую Jake's ViewPageIndicator и хочу отображать изображения как галерею салфетки. Любая ссылка refernce, где я могу начать. Я выполнил основную ViewPager и теперь хотят реализовать образ viewpaper, как показано нижеAndroid Viewpager как изображение Слайд-галерея

enter image description here

Можно ли достичь с помощью ViewPageIndicator?

ответ

72

В ViewPageIndicator Джейка он реализовал View пейджера, чтобы отобразить массив строк (т.е. ["this","is","a","text"]), который вы передаете от YourAdapter.java (который простирается FragmentPagerAdapter) к YourFragment.java, который возвращает вид на ViewPager.

Чтобы отобразить что-то другое, вам просто нужно изменить тип контекста вашего прохождения. В этом случае вы хотите передать изображения вместо текста, как показано в примере ниже:

Это, как вы настроите ваш ViewPager:

public class PlaceDetailsFragment extends SherlockFragment { 
    PlaceSlidesFragmentAdapter mAdapter; 
    ViewPager mPager; 
    PageIndicator mIndicator; 

    public static final String TAG = "detailsFragment"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_place_details, 
       container, false); 

     mAdapter = new PlaceSlidesFragmentAdapter(getActivity() 
       .getSupportFragmentManager()); 

     mPager = (ViewPager) view.findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 

     mIndicator = (CirclePageIndicator) view.findViewById(R.id.indicator); 
     mIndicator.setViewPager(mPager); 
     ((CirclePageIndicator) mIndicator).setSnap(true); 

     mIndicator 
       .setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
        @Override 
        public void onPageSelected(int position) { 
         Toast.makeText(PlaceDetailsFragment.this.getActivity(), 
           "Changed to page " + position, 
           Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onPageScrolled(int position, 
          float positionOffset, int positionOffsetPixels) { 
        } 

        @Override 
        public void onPageScrollStateChanged(int state) { 
        } 
       }); 
     return view; 
    } 

} 

your_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 



    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <com.viewpagerindicator.CirclePageIndicator 
     android:id="@+id/indicator" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dip" /> 

</LinearLayout> 

YourAdapter. Java

public class PlaceSlidesFragmentAdapter extends FragmentPagerAdapter implements 
     IconPagerAdapter { 

    private int[] Images = new int[] { R.drawable.photo1, R.drawable.photo2, 
      R.drawable.photo3, R.drawable.photo4 

    }; 

    protected static final int[] ICONS = new int[] { R.drawable.marker, 
      R.drawable.marker, R.drawable.marker, R.drawable.marker }; 

    private int mCount = Images.length; 

    public PlaceSlidesFragmentAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return new PlaceSlideFragment(Images[position]); 
    } 

    @Override 
    public int getCount() { 
     return mCount; 
    } 

    @Override 
    public int getIconResId(int index) { 
     return ICONS[index % ICONS.length]; 
    } 

    public void setCount(int count) { 
     if (count > 0 && count <= 10) { 
      mCount = count; 
      notifyDataSetChanged(); 
     } 
    } 
} 

YourFragment.java

// вам нужно вернуть изображение instaed текста из here.//

public final class PlaceSlideFragment extends Fragment { 
    int imageResourceId; 

    public PlaceSlideFragment(int i) { 
     imageResourceId = i; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     ImageView image = new ImageView(getActivity()); 
     image.setImageResource(imageResourceId); 

     LinearLayout layout = new LinearLayout(getActivity()); 
     layout.setLayoutParams(new LayoutParams()); 

     layout.setGravity(Gravity.CENTER); 
     layout.addView(image); 

     return layout; 
    } 
} 

Вы должны получить вид пейджера, как это из кода выше. enter image description here

+0

Я пробовал свой код, но изображение не отображается. что не так ?? – Dolphin

+0

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

+0

@ mak_just4anything Кажется, вы используете пейджер с представлением в представлении пейджера. Я пробовал пару раз, но не мог заставить его работать. То, что я сделал, это иметь вкладки, а не пейджер представления для фрагментов. –

3

Hoho .. Для реализации этого должна быть очень проста использовать Gallery, чтобы использовать ViewPager намного сложнее. Но я все же рекомендую использовать ViewPager, так как у галереи действительно много проблем, и она устарела с момента появления Android 4.2.

В PagerAdapter существует метод getPageWidth() для управления размером страницы, но только этим вы не можете достичь своей цели.

Постарайтесь прочитать следующие 2 статьи для справки.

multiple-view-viewpager-options

viewpager-container

12

Image Viewer с реализацией ViewPager, проверить этот проект https://github.com/chiuki/android-swipe-image-viewer

См дискуссии также Swiping images (not layouts) with viewpager

+0

Можете ли вы рассказать мне, как добавить onclick прослушиватель к изображениям? Я пытался добавить к адаптеру, но его не удалось добавить в адаптер? – asliyanage

+0

Существует буквально нулевая документация для этого проекта. Вздох. – Davor

2

вы можете использовать пользовательский элемент управление галереей .. проверить эту https://github.com/kilaka/ImageViewZoom использования галереяTouch класс из этого ..

+0

Есть ли способ, которым я могу иметь индикатор с этим? или вы говорите мне, чтобы я ссылался на этот проект? –

+0

Загрузите изображение как ленивую загрузку и поместите образ заполнителя. Он покажет изображение заполнителя перед загрузкой изображения. –

+0

в порядке. Спасибо. –

4

Просто используйте этот https://gist.github.com/8cbe094bb7a783e37ad1 для создания видимых видимых страниц и http://viewpagerindicator.com/ это, для индикатора. Это довольно круто, я использую его для галереи.

+0

У вас есть какое-то примерное приложение, которое реализует его, чтобы я мог ссылаться на него? –

+2

Я не реализовал индикатор, но в реализации галереи «ViewPager» вам нужно скопировать весь код в ваш проект, изменить содержимое в разделе «instantiateItem» из TextView на ваш ImageView. – sztembi

0
enter code here public Timer timer; 
public TimerTask task; 
public ImageView slidingimage; 

private int[] IMAGE_IDS = { 
     R.drawable.home_banner1, R.drawable.home_banner2, R.drawable.home_banner3 
    }; 

enter code here @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home_screen); 

    final Handler mHandler = new Handler(); 

     // Create runnable for posting 
     final Runnable mUpdateResults = new Runnable() { 
      public void run() { 

       AnimateandSlideShow(); 

      } 
     }; 
     int delay = 2000; // delay for 1 sec. 

     int period = 2000; // repeat every 4 sec. 

     Timer timer = new Timer(); 

     timer.scheduleAtFixedRate(new TimerTask() { 

     public void run() { 

      mHandler.post(mUpdateResults); 

     } 

     }, delay, period); 

enter code here  private void AnimateandSlideShow() { 

     slidingimage = (ImageView)findViewById(R.id.banner); 
     slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]); 

     currentimageindex++; 

     Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.custom_anim); 

      slidingimage.startAnimation(rotateimage); 

    } 
0

Большой слайдер One Image: https://github.com/daimajia/AndroidImageSlider Проверьте это

+0

работает с прекрасными изображениями с url – Prasad

+0

уже @daimajia поделился этой библиотекой -_- –

+0

@Programmingvirus Я поделился ею, прежде чем он это сделал;): p – Abdellah

41

Я сделал библиотеку с именем AndroidImageSlider, вы можете попробовать.

enter image description here

+0

@daimajia Я хочу простой просмотрщик стиль смены изображений в SliderLayout, уменьшающийся размер изображения, который выходит и увеличивает размер изображения, который идет впереди. Я не хочу этого увеличения и уменьшения в размерах, можете ли вы предложить, как я могу это достичь? –

+0

@ daimajia Я использую AndroidImageSlider. Он отлично работает. Но проблема в том, что я хочу сделать недействительным кеш. Поскольку я обновляю изображения, которые показаны на экране. Есть ли способ сделать это? –

+0

бог благословит вас за создание этой библиотеки. лучшая библиотека, которую когда-либо видели для создания слайдера изображений – erfan

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