文档章节

用ViewPager实现轮播效果

今日竹石
 今日竹石
发布于 2015/04/14 11:38
字数 532
阅读 1743
收藏 4

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

public class SamplePagerView extends RelativeLayout{

public SamplePagerView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

LayoutInflater.from(context).inflate(R.layout.viewpager_in, this);

}

public SamplePagerView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

LayoutInflater.from(context).inflate(R.layout.viewpager_in, this);

}

public SamplePagerView(Context context) {

super(context);

// TODO Auto-generated constructor stub

this.mContext = (FragmentActivity) context;

LayoutInflater.from(context).inflate(R.layout.viewpager_in, this);

}


private FragmentActivity mContext;

public FragmentActivity getmContext() {

return mContext;

}

public void setmContext(FragmentActivity mContext) {

this.mContext = mContext;

}


private CoustomViewPager viewPager;

private ImageView[] imageViews;

private TestFragmentAdapter mAdapter;

private ArrayList<ImageBean> imageBeans = new ArrayList<ImageBean>();

public ArrayList<ImageBean> getImageBeans() {

return imageBeans;

}

public void setImageBeans(ArrayList<ImageBean> imageBeans) {

this.imageBeans = imageBeans;

}


/**

* 每隔多长时间执行一次   

*/

private int interval_time = 5000;

public int getInterval_time() {

return interval_time;

}

/**

* 设置轮播间隔时间

* @param interval_time

*/

public void setInterval_time(int interval_time) {

this.interval_time = interval_time;

}


/**

* 判断是否正在手势滑动

*/

private boolean isOnTouchMove = false;

public boolean isOnTouchMove() {

return isOnTouchMove;

}

public void setOnTouchMove(boolean isOnTouchMove) {

this.isOnTouchMove = isOnTouchMove;

}

public boolean isOpen() {

return isOpen;

}

public void setOpen(boolean isOpen) {

this.isOpen = isOpen;

}

/**

* 控制开启和关闭自动轮播,默认关闭

*/

private boolean isOpen = false;

public void init(){

initArrayList();

        initCircle();

        initData();

        mHandler.postDelayed(mRunnable, interval_time);

}

    /**

     * 初始化viewpager数据

     */

private void initData() {

mAdapter = new TestFragmentAdapter(mContext.getSupportFragmentManager(), imageBeans);

viewPager = (CoustomViewPager)findViewById(R.id.viewPager);

viewPager.setPagerView(this);

viewPager.setAdapter(mAdapter);

viewPager.setOnPageChangeListener(new MyListener(imageBeans, imageViews));

viewPager.setCurrentItem(MyListener.num);

}

private void initArrayList(){

ImageBean imageBean2 = new ImageBean("2", "http://pic2.ooopic.com/11/75/33/20bOOOPIC41.jpg", R.drawable.p1);

ImageBean imageBean3 = new ImageBean("3", "http://pic.58pic.com/58pic/10/95/82/54q58PICeI2.jpg", R.drawable.p1);

ImageBean imageBean6 = new ImageBean("6", "http://pic.58pic.com/58pic/11/15/98/26T58PICCa3.jpg", R.drawable.p1);

ImageBean imageBean7 = new ImageBean("7", "http://pic.58pic.com/01/05/43/43bOOOPIC1e.jpg", R.drawable.p1);

ImageBean imageBean8 = new ImageBean("8", "http://pic.58pic.com/58pic/11/15/47/91u58PICpYF.jpg", R.drawable.p1);

ImageBean imageBean9 = new ImageBean("9", "http://pic.58pic.com/10/19/41/49bOOOPIC03.jpg", R.drawable.p1);

ImageBean imageBean10 = new ImageBean("10", "http://pic.58pic.com/58pic/11/12/92/87k58PICVwj.jpg", R.drawable.p1);

imageBeans.add(imageBean2);

imageBeans.add(imageBean3);

imageBeans.add(imageBean6);

imageBeans.add(imageBean7);

imageBeans.add(imageBean8);

imageBeans.add(imageBean9);

imageBeans.add(imageBean10);

}

    /**

     * 初始化底部圆点

     */

private void initCircle() {

int imageSize = imageBeans.size();

imageViews = new ImageView[imageSize];

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.viewGroup);

for (int i = 0; i < imageSize; i++) {

imageViews[i] = new ImageView(mContext);

imageViews[i].setLayoutParams(new LayoutParams(12,12));

if (i == 0) {

imageViews[i].setBackgroundResource(R.drawable.hollow_circle);

} else {

imageViews[i].setBackgroundResource(R.drawable.solid_circle);

}

linearLayout.addView(imageViews[i]);

}

}

    private Handler mHandlernew Handler() {


@Override

public void handleMessage(Message msg) {

viewPager.setCurrentItem(msg.what);

super.handleMessage(msg);

}


};  

private Runnable mRunnable = new Runnable() {   

public void run() {  

//每隔多长时间执行一次

mHandler.postDelayed(mRunnable, interval_time);

int length = imageBeans.size();

//如果手指没有滑动并且集合长度>1,同时开关是开的开启自动轮播

if(!isOnTouchMove && isOpen && length > 1){

MyListener.num++;

mHandler.sendEmptyMessage(MyListener.num);

}

}

}; 

具体的demo下载地址:http://download.csdn.net/detail/u010820846/8592653

© 著作权归作者所有

今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
私信 提问
Android 打造一个丝滑的自动轮播控件

现在很多的 App 都有自动轮播的 banner 界面,用于展示广告图片或者显示当前比较热门的一些活动,除了具备比较酷炫的效果之外,通过轮播的方式来减少对界面的占用,也是很赞的一个设计点。本...

developerHaoz
2018/08/08
0
0
Android 使用RecyclerView实现轮播图

一、需求 之前一篇博客使用ViewPager实现轮播图《Android ViewPager实现循环轮播图》,但是ViewPager有个天生的缺陷是View无法重用,此外ViewPager的滑动过程会频繁requestLayout,尽管可以通...

IamOkay
04/28
909
2
Rxjava + ViewPager 打造实用图片轮播

背景 说到图片轮播,之前写过一篇文章《造轮子:android自定义专属广告轮播控件》,不过当时是采用ViewFlipper实现图片轮播的,最近开始研究Rxjava技术,发现有个interval的方法,觉得很实用,...

码无止境
2016/09/22
0
0
ViewPager2:官方Viewpager升级版来临

这两天浏览安卓开发者官网的时候,发现google悄然推出了一个新的控件:ViewPager2,一看名称就知道这是一个和我们常用的ViewPager功能相似的控件,算是ViewPager的升级版吧。目前还只是推出了...

大头呆
02/21
0
0
一起学Android之ViewPager

本文以一个简单的小例子,简述在Android开发中ViewPager的常见用法,仅供学习分享使用。 概述 ViewPager是一个支持使用者左右滑动的布局管理控件,可以通过一个实现的(适配器)PageAdapter...

Alan.hsiang
01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何管stderr,而不是stdout?

我有一个要写入信息的程序stdout和stderr ,我需要grep通过什么是未来标准错误 ,而忽视标准输出 。 我当然可以分2步完成: command > /dev/null 2> temp.filegrep 'something' temp.file...

技术盛宴
21分钟前
4
0
centos7.5上通过docker安装并运行mysql5.7

1. docker pull mysql:5.7 2. docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7...

Ryub
25分钟前
5
0
什么是比赛条件?

在编写多线程应用程序时,遇到的最常见问题之一是竞争条件。 我对社区的问题是: 什么是比赛条件? 您如何检测到它们? 您如何处理它们? 最后,如何防止它们发生? #1楼 当设备或系统试图同...

javail
37分钟前
5
0
SpringMVC源码分析-DispatcherServlet-init方法分析

上一篇:SpringMVC源码分析-DispatcherServlet实例化干了些什么 先吐槽一下。。。写了两小时的博客突然被俺家小屁孩按了刷新,东西不见了,建议OSCHINA能够自动定时保存啊。让我先安静一下。...

特拉仔
44分钟前
6
0
python协程 生成器

协程,又称微线程,纤程。英文名Coroutine。 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子...

沙门行道
54分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部