OSDN Git Service

Repackaged com.andrew.apollo to com.cyngn.eleven
[android-x86/packages-apps-Eleven.git] / src / com / viewpagerindicator / IconPageIndicator.java
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  * Copyright (C) 2012 Jake Wharton
4  *
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17 package com.viewpagerindicator;
18
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;
28
29 import static android.view.ViewGroup.LayoutParams.FILL_PARENT;
30 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
31
32 import com.cyngn.eleven.R;
33
34 /**
35  * This widget implements the dynamic action bar tab behavior that can change
36  * across different configurations or circumstances.
37  */
38 public class IconPageIndicator extends HorizontalScrollView implements PageIndicator {
39     private final IcsLinearLayout mIconsLayout;
40
41     private ViewPager mViewPager;
42     private OnPageChangeListener mListener;
43     private Runnable mIconSelector;
44     private int mSelectedIndex;
45
46     public IconPageIndicator(Context context) {
47         this(context, null);
48     }
49
50     public IconPageIndicator(Context context, AttributeSet attrs) {
51         super(context, attrs);
52         setHorizontalScrollBarEnabled(false);
53
54         mIconsLayout = new IcsLinearLayout(context, R.attr.vpiIconPageIndicatorStyle);
55         addView(mIconsLayout, new LayoutParams(WRAP_CONTENT, FILL_PARENT, Gravity.CENTER));
56     }
57
58     private void animateToIcon(final int position) {
59         final View iconView = mIconsLayout.getChildAt(position);
60         if (mIconSelector != null) {
61             removeCallbacks(mIconSelector);
62         }
63         mIconSelector = new Runnable() {
64             public void run() {
65                 final int scrollPos = iconView.getLeft() - (getWidth() - iconView.getWidth()) / 2;
66                 smoothScrollTo(scrollPos, 0);
67                 mIconSelector = null;
68             }
69         };
70         post(mIconSelector);
71     }
72
73     @Override
74     public void onAttachedToWindow() {
75         super.onAttachedToWindow();
76         if (mIconSelector != null) {
77             // Re-post the selector we saved
78             post(mIconSelector);
79         }
80     }
81
82     @Override
83     public void onDetachedFromWindow() {
84         super.onDetachedFromWindow();
85         if (mIconSelector != null) {
86             removeCallbacks(mIconSelector);
87         }
88     }
89
90     @Override
91     public void onPageScrollStateChanged(int arg0) {
92         if (mListener != null) {
93             mListener.onPageScrollStateChanged(arg0);
94         }
95     }
96
97     @Override
98     public void onPageScrolled(int arg0, float arg1, int arg2) {
99         if (mListener != null) {
100             mListener.onPageScrolled(arg0, arg1, arg2);
101         }
102     }
103
104     @Override
105     public void onPageSelected(int arg0) {
106         setCurrentItem(arg0);
107         if (mListener != null) {
108             mListener.onPageSelected(arg0);
109         }
110     }
111
112     @Override
113     public void setViewPager(ViewPager view) {
114         if (mViewPager == view) {
115             return;
116         }
117         if (mViewPager != null) {
118             mViewPager.setOnPageChangeListener(null);
119         }
120         PagerAdapter adapter = view.getAdapter();
121         if (adapter == null) {
122             throw new IllegalStateException("ViewPager does not have adapter instance.");
123         }
124         mViewPager = view;
125         view.setOnPageChangeListener(this);
126         notifyDataSetChanged();
127     }
128
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);
137         }
138         if (mSelectedIndex > count) {
139             mSelectedIndex = count - 1;
140         }
141         setCurrentItem(mSelectedIndex);
142         requestLayout();
143     }
144
145     @Override
146     public void setViewPager(ViewPager view, int initialPosition) {
147         setViewPager(view);
148         setCurrentItem(initialPosition);
149     }
150
151     @Override
152     public void setCurrentItem(int item) {
153         if (mViewPager == null) {
154             throw new IllegalStateException("ViewPager has not been bound.");
155         }
156         mSelectedIndex = item;
157         mViewPager.setCurrentItem(item);
158
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);
164             if (isSelected) {
165                 animateToIcon(item);
166             }
167         }
168     }
169
170     @Override
171     public void setOnPageChangeListener(OnPageChangeListener listener) {
172         mListener = listener;
173     }
174 }