2 * Copyright (C) 2011 The Android Open Source Project
3 * Copyright (C) 2012 Jake Wharton
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 package com.viewpagerindicator;
19 import android.content.Context;
20 import android.support.v4.view.PagerAdapter;
21 import android.support.v4.view.ViewPager;
22 import android.support.v4.view.ViewPager.OnPageChangeListener;
23 import android.util.AttributeSet;
24 import android.view.Gravity;
25 import android.view.View;
26 import android.widget.HorizontalScrollView;
27 import android.widget.ImageView;
29 import static android.view.ViewGroup.LayoutParams.FILL_PARENT;
30 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
32 import com.cyngn.eleven.R;
35 * This widget implements the dynamic action bar tab behavior that can change
36 * across different configurations or circumstances.
38 public class IconPageIndicator extends HorizontalScrollView implements PageIndicator {
39 private final IcsLinearLayout mIconsLayout;
41 private ViewPager mViewPager;
42 private OnPageChangeListener mListener;
43 private Runnable mIconSelector;
44 private int mSelectedIndex;
46 public IconPageIndicator(Context context) {
50 public IconPageIndicator(Context context, AttributeSet attrs) {
51 super(context, attrs);
52 setHorizontalScrollBarEnabled(false);
54 mIconsLayout = new IcsLinearLayout(context, R.attr.vpiIconPageIndicatorStyle);
55 addView(mIconsLayout, new LayoutParams(WRAP_CONTENT, FILL_PARENT, Gravity.CENTER));
58 private void animateToIcon(final int position) {
59 final View iconView = mIconsLayout.getChildAt(position);
60 if (mIconSelector != null) {
61 removeCallbacks(mIconSelector);
63 mIconSelector = new Runnable() {
65 final int scrollPos = iconView.getLeft() - (getWidth() - iconView.getWidth()) / 2;
66 smoothScrollTo(scrollPos, 0);
74 public void onAttachedToWindow() {
75 super.onAttachedToWindow();
76 if (mIconSelector != null) {
77 // Re-post the selector we saved
83 public void onDetachedFromWindow() {
84 super.onDetachedFromWindow();
85 if (mIconSelector != null) {
86 removeCallbacks(mIconSelector);
91 public void onPageScrollStateChanged(int arg0) {
92 if (mListener != null) {
93 mListener.onPageScrollStateChanged(arg0);
98 public void onPageScrolled(int arg0, float arg1, int arg2) {
99 if (mListener != null) {
100 mListener.onPageScrolled(arg0, arg1, arg2);
105 public void onPageSelected(int arg0) {
106 setCurrentItem(arg0);
107 if (mListener != null) {
108 mListener.onPageSelected(arg0);
113 public void setViewPager(ViewPager view) {
114 if (mViewPager == view) {
117 if (mViewPager != null) {
118 mViewPager.setOnPageChangeListener(null);
120 PagerAdapter adapter = view.getAdapter();
121 if (adapter == null) {
122 throw new IllegalStateException("ViewPager does not have adapter instance.");
125 view.setOnPageChangeListener(this);
126 notifyDataSetChanged();
129 public void notifyDataSetChanged() {
130 mIconsLayout.removeAllViews();
131 IconPagerAdapter iconAdapter = (IconPagerAdapter) mViewPager.getAdapter();
132 int count = iconAdapter.getCount();
133 for (int i = 0; i < count; i++) {
134 ImageView view = new ImageView(getContext(), null, R.attr.vpiIconPageIndicatorStyle);
135 view.setImageResource(iconAdapter.getIconResId(i));
136 mIconsLayout.addView(view);
138 if (mSelectedIndex > count) {
139 mSelectedIndex = count - 1;
141 setCurrentItem(mSelectedIndex);
146 public void setViewPager(ViewPager view, int initialPosition) {
148 setCurrentItem(initialPosition);
152 public void setCurrentItem(int item) {
153 if (mViewPager == null) {
154 throw new IllegalStateException("ViewPager has not been bound.");
156 mSelectedIndex = item;
157 mViewPager.setCurrentItem(item);
159 int tabCount = mIconsLayout.getChildCount();
160 for (int i = 0; i < tabCount; i++) {
161 View child = mIconsLayout.getChildAt(i);
162 boolean isSelected = (i == item);
163 child.setSelected(isSelected);
171 public void setOnPageChangeListener(OnPageChangeListener listener) {
172 mListener = listener;