开源组件: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,如需转载请自行联系原作者
目录
相关文章
|
缓存 Android开发
ViewPager的简单使用
本节带来的是Android 3.0后引入的一个UI控件——ViewPager(视图滑动切换工具),实在想不到如何来称呼这个控件,他的大概功能:通过手势滑动可以完成View的切换,一般是用来做APP的引导页或者实现图片轮播,因为是3.0后引入的,如果想在低版本下使用,就需要引入v4兼容包,我们也可以看到,ViewPager在:android.support.v4.view.ViewPager目录下。下面我们就来学习一下这个控件的基本用法。
198 0
|
Android开发 容器 数据格式
ViewPager详解(一)——ViewPager的基本使用完整示例
MainActivity如下: package cn.ww; import java.lang.reflect.Field; import android.
1073 0
|
XML Java Android开发
安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来。效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragment作为内容区域 点击功能按钮,想将所有的图标变为暗色图标,再调用相应的Fragment,并使对应的图标变亮 效果图: 布局文件部分 activity_main.
982 0
|
前端开发 Android开发 容器
1-VIII--ViewPager的基本使用
零、前言 [1].ViewPager顾名思义是将若干视图一页一页的展现 [2].ViewPager和Fragment郎才女貌,天造之合,在加个TabLayout简直和睦一家人 [3].
1082 0
|
5月前
|
小程序 前端开发 JavaScript
小程序入门之认识view和text组件
小程序入门之认识view和text组件
125 0
|
Android开发 容器
Android开发之ViewPager简单使用
什么是ViewPager? ViewPager(android.support.v4.view.ViewPager)是android扩展包v4包中的类,这个类可以让用户左右切换当前的view,实现滑动切换的效果,在使用这个类之前,必须明白: ViewPager类直接继承了ViewGroup类,也就是说它和我们经常打交道的LinearLayout一样,都是一个容器,需要在里面添加我们想要显示的内容。
843 0
|
9月前
|
Android开发 容器
35. 【Android教程】视频页面:ViewPager
35. 【Android教程】视频页面:ViewPager
78 3
|
开发工具 git
Compose中实现原生TabView+ViewPager的效果
Compose中实现原生TabView+ViewPager的效果
1462 0
Compose中实现原生TabView+ViewPager的效果