您的位置:首页 > 移动开发 > Android开发

android 使用ViewFlow实现左右滑动

2013-08-06 11:59 375 查看



是的,你没看错,是ViewFlow,不是ViewPager,也不是ViewFlipper。ViewFlow是一个开源的androidUI库。它提供了三个组件ViewFlow、FlowIndicator和TitleFlowIndicator。它使得由Adapter产生的ViewGroup中的View可以水平滑动。





一、使用ViewFlow库

那么什么时候可以使用这个组件呢?文档上说,当你需要在一系列不确定数目的view中滑动时,可以考虑使用ViewFlow。如果你的view数目确定,你应该使用Fragments或兼容库里的ViewPager。

1、使用ViewFlow
怎么使用呢?首先在你的layout文件中加入:

1
2
3
4
<</CODE>org.taptwo.android.widget.ViewFlow

[code]android:id
=
"@+id/viewflow"

app:sidebuffer
=
"5"

/>


其中app:sidebuffer属性是ViewFlow组件自定义的,使用这些属性时,需要增加如下的xml的命名空间:

1
xmlns:app="http://schemas.android.com/apk/res/your.application.package.here"


然后在你的Activity里面添加如下代码用于使用ViewFlow:

1
2
3
4
5
6
7
8
9
10
ViewFlowviewFlow=(ViewFlow)findViewById(R.id.viewflow);

viewFlow.setAdapter(myAdapter);

//设置初始view的位置

//viewFlow.setAdapter(myAdapter,8);

//监听view切换事件,简单的需求可不监听

viewFlow.setOnViewSwitchListener(
new
ViewSwitchListener(){

public
void
onSwitched(Viewv,
int
position){

//Yourcodehere

}

});


当然,你也可以使用该库中的FlowIndicator为你在多个view中切换时提供一个指示器,目前该库已经实现了两种指示器:一种是圆点指示器FlowIndicator;另一种是标题指示器TitleFlowIndicator。

2、使用圆点指示器
圆点指示器可以这样使用:

先在layout中这样定义

1
2
3
4
<</CODE>org.taptwo.android.widget.CircleFlowIndicator

[code]android:padding
=
"10dip"
android:layout_height
=
"wrap_content"

android:layout_width
=
"wrap_content"
android:id
=
"@+id/viewflowindic"

android:background
=
"#00000000"
/>


然后在activity中调用它

1
2
3
CircleFlowIndicatorindic=(CircleFlowIndicator)

findViewById(R.id.viewflowindic);

viewFlow.setFlowIndicator(indic);


圆点指示器还支持activeColor、inactiveColor、activeType(填充或描边)、inactiveType(填充或描边)、fadeOut(设置圆点自动隐藏的秒数,若为0则不会自动隐藏)、radius(圆点的半径)等。

3、使用标题指示器
标题指示器也是先layout里定义:

1
2
3
4
5
6
7
8
9
10
11
<</CODE>org.taptwo.android.widget.TitleFlowIndicator

[code]android:id
=
"@+id/viewflowindic"

android:layout_height
=
"wrap_content"

android:layout_width
=
"fill_parent"

app:footerLineHeight
=
"2dp"

app:footerTriangleHeight
=
"10dp"

app:textColor
=
"#FFFFFFFF"
app:selectedColor
=
"#FFFFC445"

app:footerColor
=
"#FFFFC445"
app:titlePadding
=
"10dp"

app:textSize
=
"11dp"
app:selectedSize
=
"12dp"

android:layout_marginTop
=
"10dip"

app:clipPadding
=
"5dp"
/>


然后在activity中调用它:

1
2
3
4
TitleFlowIndicatorindicator=(TitleFlowIndicator)

findViewById(R.id.viewflowindic);

indicator.setTitleProvider(myTitleProvider);

viewFlow.setFlowIndicator(indicator);


OK,以上就是ViewFlow库提供三大组件及其用法(来自其文档),当然你也可以把该组件库打包成jar调用。

要注意的是,如果你使用的androidsdk版本是android2.2以下,最好在activity中加上如下方法

1
2
3
4
5
@Override

public
void
onConfigurationChanged(ConfigurationnewConfig){

super
.onConfigurationChanged(newConfig);

viewFlow.onConfigurationChanged(newConfig);

}


二、实现了自动播放和循环的ViewFlow
网友灵台斜月对ViewFlow实现了改进,增加了自动播放功能和循环功能。这里可以下载工程代码。

滑动循环功能通过在adapter的getcount方法要返回Integer.Max_value。然后在getview方法中,由于position不断递增,可以取余数。并调用viewflow.setSelection(3*图片数)来实现循环。

自动播放是通过如下代码实现的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//通过延迟消息实现自动播放,使用时通过调用该方法来启动自动播放功能

public
void
startAutoFlowTimer(){

handler=

new
Handler(){

@Override

public
void

handleMessage(Messagemsg){

snapToScreen((mCurrentScreen+
1
)%getChildCount());

Messagemessage=handler.obtainMessage(
0
);

sendMessageDelayed(message,timeSpan);

}

};


Messagemessage=handler.obtainMessage(
0
);

handler.sendMessageDelayed(message,timeSpan);

}


另外,原ViewFlow自带的例子在这里,直接down的代码无法使用,这个代码可以直接导入。里面有4个例子,分别展示了带圆点指示器的ViewFlow、带标题指示器的ViewFlow、view结构不同的ViewFlow及异步加载view的ViewFlow。还可以学习下如何设置自定义组件的属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: