首先这里先声明引用了开源库viewflow,我这里只用了其中的ViewFlow和CircleFlowIndicator。想对viewflow有更多了解的可以去github下载viewflow开源包。
viewflow本身还没有实现循环和自动播放功能。我这里在viewflow源码的基础上加了点代码以实现这两个功能。
说viewflow没有实现循环这话不太对,其实要看你的adapter怎么写。因为viewflow是AdapterView。
要实现viewflow循环,你的adapter的getcount方法要返回一个很大的值,例如Integer.Max_value。然后在getview方法中,由于position不断递增,可以通过取余数来实现。Positon%length
length为你图片实际的张数。例如我有3张图片,那么position=3显示的是第一张图片,跟position=0一样。最后在activity中初始化viewflow adapter位置。如果你不设置 position=0是不能向左的,因为position不能小于0。可以调用viewflow.setSelection(3*1000); 设置的数值是你图片张数的整数倍,这样显示的还是第一张。(这样看起来就循环了,既可以向左,也可以向右,从第一张可以向左跳到最后一张,从最后一张可以向右回到第一张。。。)
我写的ImageAdapter,图片直接在资源文件中,实际应用时应该是从网络获取。
实现自动播放比较简单,我是通过发送延迟消息来实现的。收到延迟消息后再给自己发一条延迟消息。
效果图如下:
具体代码见demo,代码里我写的地方有注释。
demo:
许多朋友说有bug,我调试了一下,确实存在,这修改了一下,把bug修复了
viewflow本身还没有实现循环和自动播放功能。我这里在viewflow源码的基础上加了点代码以实现这两个功能。
说viewflow没有实现循环这话不太对,其实要看你的adapter怎么写。因为viewflow是AdapterView。
要实现viewflow循环,你的adapter的getcount方法要返回一个很大的值,例如Integer.Max_value。然后在getview方法中,由于position不断递增,可以通过取余数来实现。Positon%length
length为你图片实际的张数。例如我有3张图片,那么position=3显示的是第一张图片,跟position=0一样。最后在activity中初始化viewflow adapter位置。如果你不设置 position=0是不能向左的,因为position不能小于0。可以调用viewflow.setSelection(3*1000); 设置的数值是你图片张数的整数倍,这样显示的还是第一张。(这样看起来就循环了,既可以向左,也可以向右,从第一张可以向左跳到最后一张,从最后一张可以向右回到第一张。。。)
我写的ImageAdapter,图片直接在资源文件中,实际应用时应该是从网络获取。
实现自动播放比较简单,我是通过发送延迟消息来实现的。收到延迟消息后再给自己发一条延迟消息。
效果图如下:
具体代码见demo,代码里我写的地方有注释。
demo:
许多朋友说有bug,我调试了一下,确实存在,这修改了一下,把bug修复了
新demo:
http://www.eoeandroid.com/thread-163018-1-1.html