效果图:
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)
{
}
}
}
|
其他方法:
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,如需转载请自行联系原作者