- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android中viewPager使用指南由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用。这里只简单说下直接使用。 使用viewPager的步骤如下:
(1)在布局中放入viewPager的控件 (2)设置加载到viewPager中的view (3)编写viewPager特有的adapter (4)实例化viewPager并给他绑定上步设置的adapter 。
这个步骤体现的也是MVC思想,可以参考我之前的文章http://www.zzvips.com/article/163082.html 。
这里为了方便说明 我新建一个项目来说明viewPager的使用 。
步骤一 在布局中新建一个viewPager 。
布局文件如下:
1
2
3
4
5
|
<android.support.v4.view.ViewPager
android:id=
"@+id/view_pager"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
</android.support.v4.view.ViewPager>
|
设置加载到viewPager中的view 。
这里为了方便,显示设置2个不同背景的颜色的view,放入viewPager中,每个view的布局如下图: item_one 。
1
2
3
4
5
|
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@android:color/holo_red_light"
>
</LinearLayout>
|
item_two 。
1
2
3
4
5
|
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@android:color/holo_blue_bright"
>
</LinearLayout>
|
编写viewPager特有的adpter 。
这里我们继承viewPager的PagerAdapter,主要重写getCount方法、destroyItem 、instantiateItem 、isViewFromObject 、。代码如下:
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
|
public
class
Adapter
extends
PagerAdapter{
private
List<View> views;
public
Adapter(List<View> views){
this
.views = views;
}
@Override
public
int
getCount() {
return
views.size();
}
@Override
public
void
destroyItem(View arg0,
int
arg1, Object arg2) {
((ViewPager) arg0).removeView(views.get(arg1));
}
@Override
public
void
finishUpdate(View arg0) {
}
@Override
public
Object instantiateItem(View arg0,
int
arg1) {
((ViewPager) arg0).addView(views.get(arg1),
0
);
return
views.get(arg1);
}
@Override
public
boolean
isViewFromObject(View arg0, Object arg1) {
return
arg0 == (arg1);
// return false;
}
@Override
public
void
restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public
Parcelable saveState() {
return
null
;
}
@Override
public
void
startUpdate(View arg0) {
}
}
|
实例化viewPager并绑定Adapter 。
这里,实例化viewPager 为mpager ,然后将建好的view:item_one 和item_two 通过LayoutInflater加载到建好的View类型的数组中。将数组加到List<View>里面。作为参数传入到adapter。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
private
ViewPager mpager;
private
List<View> myview =
new
ArrayList<>();
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mpager = (ViewPager) findViewById(R.id.view_pager);
LayoutInflater mInflater = getLayoutInflater();
View [] pagers = {mInflater.inflate(R.layout.item_one ,
null
),
mInflater.inflate(R.layout.item_two ,
null
)};
for
(
int
i =
0
; i < pagers.length ; i++) {
myview.add(pagers[i]);
}
Adapter ad =
new
Adapter(myview);
mpager.setAdapter(ad);
mpager.setCurrentItem(
0
);
}
|
PS :实现viewPager手动无限循环 。
这里用一种设置页面跳转的方式来实现无限循环。在myviews数组中加入两个view,分别在第0个位置加入最后一个itemview,和最后一个位置加入第一个itemview。代码如下所示:
1
2
3
4
5
6
7
8
9
|
final
View [] pagers = {mInflater.inflate(R.layout.item_one ,
null
),
mInflater.inflate(R.layout.item_two ,
null
),
mInflater.inflate(R.layout.item_three,
null
)};
for
(
int
i =
0
; i < pagers.length ; i++) {
myview.add(pagers[i]);
}
myview.add(
0
,mInflater.inflate(R.layout.item_three ,
null
));
myview.add(
4
, mInflater.inflate(R.layout.item_one,
null
));
|
这里为了测试方便,这里在上个基础上加入了一个item,就是三张view循环播放 用来实现衔接。当向右滑动到最后一个页面的时候,将这个页指定为第一个view所在的页,向左滑动到第一个页面的时候,将这个页面制定为最后一个view所在页。注意这里的view最后一个不是指数组的最后一个 而是指三个view中最后一个.
设置viewPager的实例化对象的方法setOnPageChangeListener 虽然此方法显示不推荐使用,但为了实现这个功能,还是先将就用吧。等日后谷歌更新viewPager,能有属性自动实现循环。 代码如下:
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
|
mpager.setOnPageChangeListener(
new
ViewPager.OnPageChangeListener() {
@Override
public
void
onPageScrolled(
int
position,
float
positionOffset,
int
positionOffsetPixels) {
}
@Override
public
void
onPageSelected(
int
position) {
int
index = position;
if
(index ==
0
){
//注意这里pagers数组,不是myviews数组
index = pagers.length;
}
else
if
(position == pagers.length +
1
){
index =
1
;
}
if
(position != index){
mpager.setCurrentItem(index,
false
);
}
}
@Override
public
void
onPageScrollStateChanged(
int
state) {
}
});
|
重写Adapter中的instantiateItem 方法来显示view 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public
Object instantiateItem(View arg0,
int
arg1) {
if
(arg1 ==
0
){
((ViewPager) arg0).removeView(views.get(myview.size() -
3
));
((ViewPager) arg0).addView(views.get(myview.size() -
3
),
0
);
}
else
if
(arg1 == myview.size() -
1
){
((ViewPager) arg0).removeView(views.get(
0
));
((ViewPager) arg0).addView(views.get(
0
),
0
);
}
else
{
((ViewPager) arg0).addView(views.get(arg1),
0
);
}
return
views.get(arg1);
}
|
这样无限滑动就可以简单实现,但在滑动时会出现有空白页面的bug,可能是因为先removeView,在加入view的原因.
最后此篇关于Android中viewPager使用指南的文章就讲到这里了,如果你想了解更多关于Android中viewPager使用指南的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我目前面临将 ViewPager 放入另一个 ViewPager 中的问题,两者都可滑动。我成功创建了我的第一个 ViewPager,它包含三个页面,中间一个是第二个(内部)ViewPager,其中包
在我的主要 Activity 中,我有一个水平 viewpager。在 viewpager 的一个 fragment 中,我有另一个垂直 viewpager。两者都很好。但是对于水平 viewpage
我想创建一个 ViewPager(包含三个项目),其中每个 View 都是另一个 ViewPager(包含两个项目)。用户然后像这样滑动项目: ViewPager1[0] ViewPager2[0]
如何修复这个错误 setupWithViewPager(android.support.v4.view.ViewPager) in TabLayout cannot br applied to (an
我有一个包含 3 张图片的数组的 viewPage,我想在缩放其中一张时锁定 viewPager,因为当我在右侧滚动时,会出现下一张照片!这是我的代码 enter code here public
我是第一次实现 ViewPager,我遇到了一些问题,因为我收到以下错误: 06-20 10:40:51.366 11377-11377/com.example.ruelas.elite E/Andr
我真的是 android 的新手,如果对我的类(class)作业有任何帮助,我将不胜感激。 我需要做的: 1) 在一个 Activity 中有两个 ViewPagers(未嵌套) 2)两个ViewPa
我正在自定义我的 Android 应用程序以在四个方向上滑动,我正在使用 ViewPager 水平 和 VerticalViewPager 滑动垂直滑动(这就像对 DirectionalViewPag
我需要为平板电脑创建一个 ViewPager,在平板电脑的左侧会有导航按钮供用户选择。例如。 左侧导航将有 4 个图像按钮,每个项目将用户带到不同的教程。每个图像按钮都会加载一个 ViewPager。
我用过Vertical Viewpager在我的显示数据集合的项目中。在单个数据(项目)中,我有更多图像要显示。所以我尝试使用 viewpager。 但是当我水平滚动时,它会阻止垂直 Viewpage
我有一个父级 ViewPager,它的每个页面都包含一个子级 ViewPager。子 ViewPager 可能包含一个 ListView 或一个垂直的 ScrollView。我想将子级 ViewPag
我的任务是创建一个非常不正统的布局,只能通过另一个 viewpager 的第二个 Pane 内的 viewpager 来完成,幸运的是外部 viewpager 需要被锁定所以任务更现实一些,但是意外的
目标是根据屏幕方向(纵向或横向)以不同的布局在屏幕上显示两个 fragment ( fragment A、 fragment B)。 当设备处于纵向模式时,一次仅显示 Frag A 和 Frag B
我想禁用父 viewpager 中的子 viewpager 的滑动。 我目前使用这个自定义子 viewpager public class CustomViewPager extends ViewPa
我有两个 ViewPager - 一个在另一个下面。现在客户希望我们添加扩展底部 ViewPager(具有三个 ListView)以覆盖顶部 ViewPager 的可能性。当我将两个 ViewPage
我用谷歌搜索了这个问题很多天。找到一个解决方案,在Viewpager的开头和结尾添加一个空白View。当viewpager.getcurrentItem()==0时,则重新指向1。在我看来这种做法非常
我从适配器设置标题后,标题未出现在 PagerTabStrip 中 这是我的 Activity public class MainActivity extends AppCompatActivity
我有一个 ViewPager,其中包含多个 TextView,它们具有不同的字体大小。此外,我还获得了增加/减少字体大小的按钮,通过添加其默认大小加上一个名为 STEP 的值(该值通过 inc/dec
我有一个嵌套的 ViewPager,效果非常好。唯一的问题是,一旦子 ViewPager 位于最后一项并且我进一步滚动,父 ViewPager 就会滚动。我不想要这种行为。 我如何实现这一目标? 这是
我想显示一个带有滑动抽屉的 Viewpager。Viewpager 用于滚动图像,我想在该 viewpager 的顶部放置一个滑动抽屉(从顶部到按钮)。 我附上了我的示例代码。如果您对如何实现此屏幕有
我是一名优秀的程序员,十分优秀!