开源组件:DEMO学习-DWinterTabDemo:自定义tab+viewpager

简介:

效果图:

204319522.png

demo源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
public  class  MainActivity  extends  Activity
{
     // ViewPager是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。
     // android-support-v4.jar
     private  ViewPager mPager; // 页卡内容
     private  List<View> listViews;  // Tab页面列表
     private  ImageView cursor; // 动画图片
     private  TextView t1, t2, t3; // 页卡头标
     private  int  offset =  0 ; // 动画图片偏移量
     private  int  currIndex =  0 ; // 当前页卡编号
     private  int  bmpW; // 动画图片宽度
             
     @Override
     public  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
         InitImageView();
         InitTextView();
         InitViewPager();
     }
             
     /**
      * 初始化头标
      */
     private  void  InitTextView()
     {
         t1 = (TextView) findViewById(R.id.text1);
         t2 = (TextView) findViewById(R.id.text2);
         t3 = (TextView) findViewById(R.id.text3);
                 
         t1.setOnClickListener( new  MyOnClickListener( 0 ));
         t2.setOnClickListener( new  MyOnClickListener( 1 ));
         t3.setOnClickListener( new  MyOnClickListener( 2 ));
     }
             
     /**
      * 初始化ViewPager
      */
     private  void  InitViewPager()
     {
         mPager = (ViewPager) findViewById(R.id.vPager);
         listViews =  new  ArrayList<View>();
         LayoutInflater mInflater = getLayoutInflater();
         listViews.add(mInflater.inflate(R.layout.lay1,  null ));
         listViews.add(mInflater.inflate(R.layout.lay2,  null ));
         listViews.add(mInflater.inflate(R.layout.lay3,  null ));
         mPager.setAdapter( new  MyPagerAdapter(listViews));
         mPager.setCurrentItem( 0 );
         mPager.setOnPageChangeListener( new  MyOnPageChangeListener());
     }
             
     /**
      * 初始化动画
      */
     private  void  InitImageView()
     {
         cursor = (ImageView) findViewById(R.id.cursor);
         bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth(); // 获取图片宽度
         DisplayMetrics dm =  new  DisplayMetrics();
         getWindowManager().getDefaultDisplay().getMetrics(dm);
         int  screenW = dm.widthPixels; // 获取分辨率宽度
         offset = (screenW /  3  - bmpW) /  2 ; // 计算偏移量
         Matrix matrix =  new  Matrix();
         matrix.postTranslate(offset,  0 );
         cursor.setImageMatrix(matrix); // 设置动画初始位置
     }
             
     /**
      * ViewPager适配器
      */
     public  class  MyPagerAdapter  extends  PagerAdapter
     {
         public  List<View> mListViews;
                 
         public  MyPagerAdapter(List<View> mListViews)
         {
             this .mListViews = mListViews;
         }
                 
         @Override
         public  void  destroyItem(View arg0,  int  arg1, Object arg2)
         {
             ((ViewPager) arg0).removeView(mListViews.get(arg1));
         }
                 
         @Override
         public  void  finishUpdate(View arg0)
         {
         }
                 
         @Override
         public  int  getCount()
         {
             return  mListViews.size();
         }
                 
         @Override
         public  Object instantiateItem(View arg0,  int  arg1)
         {
             ((ViewPager) arg0).addView(mListViews.get(arg1),  0 );
             return  mListViews.get(arg1);
         }
                 
         @Override
         public  boolean  isViewFromObject(View arg0, Object arg1)
         {
             return  arg0 == (arg1);
         }
                 
         @Override
         public  void  restoreState(Parcelable arg0, ClassLoader arg1)
         {
         }
                 
         @Override
         public  Parcelable saveState()
         {
             return  null ;
         }
                 
         @Override
         public  void  startUpdate(View arg0)
         {
         }
     }
             
     /**
      * 头标点击监听
      */
     public  class  MyOnClickListener  implements  View.OnClickListener
     {
         private  int  index =  0 ;
                 
         public  MyOnClickListener( int  i)
         {
             index = i;
         }
                 
         @Override
         public  void  onClick(View v)
         {
             mPager.setCurrentItem(index);
         }
     };
             
     /**
      * 页卡切换监听
      */
     public  class  MyOnPageChangeListener  implements  OnPageChangeListener
     {
                 
         int  one = offset *  2  + bmpW; // 页卡1 -> 页卡2 偏移量
         int  two = one *  2 ; // 页卡1 -> 页卡3 偏移量
                 
         @Override
         public  void  onPageSelected( int  arg0)
         {
             Animation animation =  null ;
             switch  (arg0)
             {
                 case  0 :
                     if  (currIndex ==  1 )
                     {
                         animation =  new  TranslateAnimation(one,  0 0 0 );
                     }
                     else  if  (currIndex ==  2 )
                     {
                         animation =  new  TranslateAnimation(two,  0 0 0 );
                     }
                     break ;
                 case  1 :
                     if  (currIndex ==  0 )
                     {
                         animation =  new  TranslateAnimation(offset, one,  0 0 );
                     }
                     else  if  (currIndex ==  2 )
                     {
                         animation =  new  TranslateAnimation(two, one,  0 0 );
                     }
                     break ;
                 case  2 :
                     if  (currIndex ==  0 )
                     {
                         animation =  new  TranslateAnimation(offset, two,  0 0 );
                     }
                     else  if  (currIndex ==  1 )
                     {
                         animation =  new  TranslateAnimation(one, two,  0 0 );
                     }
                     break ;
             }
             currIndex = arg0;
             animation.setFillAfter( true ); // True:图片停在动画结束位置
             animation.setDuration( 300 );
             cursor.startAnimation(animation);
         }
                 
         @Override
         public  void  onPageScrolled( int  arg0,  float  arg1,  int  arg2)
         {
         }
                 
         @Override
         public  void  onPageScrollStateChanged( int  arg0)
         {
         }
     }
}




其他方法:

1.ViewPager使用

http://zhangfy068.iteye.com/blog/1819979


2.页卡实现详解:Android ViewPager使用详解

http://blog.csdn.net/wangjinyu501/article/details/8169924






本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1224632,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
XML Android开发 数据格式
Jetpack Navigation 实现自定义 View 导航
Jetpack Navigation 实现自定义 View 导航
55 0
|
缓存 Android开发
ViewPager的简单使用
本节带来的是Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具),实在想不到如何来称呼这个控件,他的大概功能:通过手势滑动可以完成View的切换,一般是用来做APP的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4兼容包,我们也可以看到,ViewPager在:android.support.v4.view.ViewPager目录下。下面我们就来学习一下这个控件的基本用法。
160 0
|
开发工具 git
Compose中实现原生TabView+ViewPager的效果
Compose中实现原生TabView+ViewPager的效果
1169 0
Compose中实现原生TabView+ViewPager的效果
|
开发工具 Android开发
XPage 一个非常方便的Android Fragment页面框架
XPage 一个非常方便的Android Fragment页面框架
650 0
XPage 一个非常方便的Android Fragment页面框架
|
XML Android开发 数据格式
Android 标签栏pagerslidingtabstrip用法实例(含Demo)
Android 标签栏pagerslidingtabstrip用法实例(含Demo)
Android 标签栏pagerslidingtabstrip用法实例(含Demo)
|
Android开发
Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
|
前端开发 Android开发 容器
1-VIII--ViewPager的基本使用
零、前言 [1].ViewPager顾名思义是将若干视图一页一页的展现 [2].ViewPager和Fragment郎才女貌,天造之合,在加个TabLayout简直和睦一家人 [3].
1026 0
|
Java Android开发 容器
Android项目实战(四):ViewPager切换动画(3.0版本以上有效果)
原文:Android项目实战(四):ViewPager切换动画(3.0版本以上有效果) 学习内容来自“慕课网” 一般APP进去之后都会有几张图片来导航,这里就学习怎么在这张图片切换的时候添加切换动画效果 先看布局文件 activity_main.
929 0
ViewPager(通过反射修改viewpager切换速度)
(创建于2016/11/17) import java.lang.reflect.Field; import android.content.
1084 0