Здравствуйте. В прошлом обзоре я рассмотрел лишь часть индикаторов, которые нам предоставляет библиотека. В этой статье я рассмотрю оставшийся вида индикаторов.
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.
