android 使用ViewFlow实现左右滑动

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

一、使用ViewFlow库

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

1、使用ViewFlow

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

1
2
3
4
< org.taptwo.android.widget.ViewFlow
android:id = "@+id/viewflow"
app:sidebuffer = "5"
/>

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

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

1
2
3
4
5
6
7
8
9
10
ViewFlow viewFlow = (ViewFlow) findViewById(R.id.viewflow);
viewFlow.setAdapter(myAdapter);
//设置初始view的位置
//viewFlow.setAdapter(myAdapter, 8);
//监听view切换事件,简单的需求可不监听
viewFlow.setOnViewSwitchListener( new ViewSwitchListener() {
     public void onSwitched(View v, int position) {
     / / Your code here
     }
});

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

2、使用圆点指示器

圆点指示器可以这样使用:
先在layout中这样定义

1
2
3
4
< org.taptwo.android.widget.CircleFlowIndicator
android:padding = "10dip" android:layout_height = "wrap_content"
android:layout_width = "wrap_content" android:id = "@+id/viewflowindic"
android:background = "#00000000" />

然后在activity中调用它

1
2
3
CircleFlowIndicator indic = (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
< org.taptwo.android.widget.TitleFlowIndicator
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
TitleFlowIndicator indicator = (TitleFlowIndicator)
                           findViewById(R.id.viewflowindic);
indicator.setTitleProvider(myTitleProvider);
viewFlow.setFlowIndicator(indicator);

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

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

1
2
3
4
5
@Override
  public void onConfigurationChanged(Configuration newConfig) {
      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(Message msg) {
                    snapToScreen((mCurrentScreen+ 1 )%getChildCount());
                     Message message = handler.obtainMessage( 0 );
                    sendMessageDelayed(message, timeSpan);
             }
            };
 
            Message message = handler.obtainMessage( 0 );
            handler.sendMessageDelayed(message, timeSpan);
        }

另外,原ViewFlow自带的例子在这里,直接down的代码无法使用,这个代码可以直接导入。里面有4个例子,分别展示了带圆点指示器的ViewFlow、带标题指示器的ViewFlow、view结构不同的ViewFlow及异步加载view的ViewFlow。还可以学习下如何设置自定义组件的属性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值