ViewPagerIndicator — индикатор для ViewPager. Часть 2

Здравствуйте. В прошлом обзоре я рассмотрел лишь часть индикаторов, которые нам предоставляет библиотека. В этой статье я рассмотрю оставшийся вида индикаторов.

4. IconPageIndicator

IconPageIndicator — индикатор в виде иконок.

Для начала создадим drawable-файл:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true"
         android:drawable="@drawable/perm_group_calendar_selected"/> 
   <item android:drawable="@drawable/perm_group_calendar_normal" />
</selector>

У нас есть два состояния: выбран и не выбран.

Код адаптера:

public class IconsAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
  
    protected static final String[] CONTENT = new String[] { "This", "Is", "A", "Test", };
    protected static final int[] ICONS = new int[] {
            R.drawable.perm_group_calendar,
            R.drawable.perm_group_camera,
            R.drawable.perm_group_device_alarms,
            R.drawable.perm_group_location
    };

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

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

    @Override
    public int getCount() {
        return CONTENT.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
      return CONTENT[position];
    }

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

}

В адаптере мы храним текст, который будет отображаться на экране. Также у нас есть массив с id drawable-ресурсов, которые мы создали ранее. В методе getItem мы каждый раз создаем новый фрагмент. Хоть это и не правильно с точки зрения экономичности, но зато очень сильно облегчает код.

Код TestFragment:

public final class TestFragment extends Fragment {
  
   private String mContent = "";

    public TestFragment(String mContent) {
    this.mContent = mContent;
  }

  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView text = new TextView(getActivity());
        text.setGravity(Gravity.CENTER);
        text.setText(mContent);
        text.setTextSize(20 * getResources().getDisplayMetrics().density);
        text.setPadding(20, 20, 20, 20);

        LinearLayout layout = new LinearLayout(getActivity());
        layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        layout.setGravity(Gravity.CENTER);
        layout.addView(text);

        return layout;
    }


}

В методе onCreateView  мы создаем TextView, устанавливаем ему размер текста, отступы и т. д.

Код main.xml:

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

    <android.support.v4.view.ViewPager
        android:id="@+id/icons_default_pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
    <com.viewpagerindicator.IconPageIndicator
        android:id="@+id/icons_default_indicator"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        />

</LinearLayout>

И код MainActivity.java:

public class MainActivity extends FragmentActivity  {

  
  private IconPageIndicator mIndicator;
  private ViewPager viewPager;
  private IconsAdapter viewPagerAdapter;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.icons_default);
    
    viewPagerAdapter = new IconsAdapter(getSupportFragmentManager());
    
    viewPager = (ViewPager) findViewById(R.id.icons_default_pager);
    viewPager.setAdapter(viewPagerAdapter);

       		mIndicator = (IconPageIndicator)findViewById(R.id.icons_default_indicator);
        	mIndicator.setViewPager(viewPager);
        
  }
}

Обратите внимание на то, что наша Activity наследуется от FragmentActivity. Это нужно для того, чтобы вызвать метод getSupportFragmentManager() при создании адаптера. Далее мы инициализируем ViewPager и адаптер и привязываем их. На этом все.

Библиотека на GitHub: ViewPagerIndicator.
Исходники примера: ViewPagerIndicator.

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *