布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" > <RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp" > <android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <LinearLayout
android:id="@+id/ll_point"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="20dp"
android:orientation="horizontal" />
</RelativeLayout> </RelativeLayout>

相关代码

 public class MainActivity extends Activity {

     private ViewPager mViewPager;
private LinearLayout mLlPoint;
private MyAdapter mAdapter; private int[] ids = {R.drawable.a1,R.drawable.a2,R.drawable.a3};
private List<ImageView> mImages;
private int lastPos;
private boolean isRunning; private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case 0: mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); if (isRunning) {
mHandler.sendEmptyMessageDelayed(0,3000);
} break; default:
break;
}
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
initData(); mAdapter = new MyAdapter();
mViewPager.setAdapter(mAdapter);
mViewPager.addOnPageChangeListener(new PagerChnageListener());
mViewPager.setCurrentItem((mImages.size()) * 1000); isRunning = true;
mHandler.sendEmptyMessageDelayed(0,3000);
} private void initView() {
mViewPager = (ViewPager)findViewById(R.id.vp);
mLlPoint = (LinearLayout)findViewById(R.id.ll_point);
} private void initData() { mImages = new ArrayList<ImageView>(); for (int i = 0;i < ids.length;i++) {
ImageView iv = new ImageView(this);
iv.setBackgroundResource(ids[i]);
mImages.add(iv); View view = new View(this);
view.setBackgroundResource(R.drawable.point_selector);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Utils.dip2px(this,10),
Utils.dip2px(this,10));
if (i != 0) {
params.leftMargin = 20;
view.setEnabled(false);
}else {
view.setEnabled(true);
}
view.setLayoutParams(params);
mLlPoint.addView(view);
}
} class MyAdapter extends PagerAdapter { @Override
public int getCount() {
return Integer.MAX_VALUE;
} @Override
public boolean isViewFromObject(View arg0,Object arg1) {
return arg0 == arg1;
} @Override
public Object instantiateItem(ViewGroup container,int position) {
ImageView view = mImages.get(position % mImages.size()); // 增加异常扑捉防止空白页
try {
((ViewPager)container).addView(view,0);
}catch(Exception e) {
e.printStackTrace();
}
return view;
} @Override
public void destroyItem(ViewGroup container,int position,Object object) {
// 防止2/3个出现BUG
// container.removeView(mImages.get(position % mImages.size()));
}
} class PagerChnageListener implements OnPageChangeListener { /* state: 0空闲,1是滑行中,2加载完毕 */
@Override
public void onPageScrollStateChanged(int state) {
switch(state){
case 0:
isRunning = true;
break;
case 1:
isRunning = false;
break;
case 2:
isRunning = true;
break; default:
break;
}
} @Override
public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
int pos = position % mImages.size();
mLlPoint.getChildAt(lastPos).setEnabled(false);
mLlPoint.getChildAt(pos).setEnabled(true);
lastPos = pos;
}
} @Override
protected void onDestroy() {
super.onDestroy();
isRunning = false;
mHandler.removeCallbacksAndMessages(null);
}
}

 

 效果图

ViewPager—02图片无限轮播的更多相关文章

  1. Android实现广告页图片无限轮播

    一.概述 对于一个联网的Android应用, 首页广告无限轮播基本已经成为标配了. 那么它是怎么实现的呢? 有几种实现方式呢? 二.无限轮播的实现 1.最常规的手段是用 ViewPager来实现 2. ...

  2. iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)

    这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...

  3. iOS开发之ImageView复用实现图片无限轮播

    在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageVi ...

  4. iOS 两种不同的图片无限轮播

    代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...

  5. ViewPager实现图片的轮播

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的pos ...

  6. iOS实现图片无限轮播之使用第三方库SDCycleScrollView(转)

    下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView #import "ViewController.h" # ...

  7. ViewPager实现无限轮播踩坑记

    最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对 ...

  8. ViewPager无限轮播与自定义切换动画

    一直在寻求一个能用得长久的ViewPager,寻寻觅觅终于发现,ViewPager有这一个就够了. 注:并非完全原创 先看一下效果: 淡入淡出: 旋转: 无限轮播的ViewPager 主要设计思路(以 ...

  9. iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

    iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43      阅读:630      评论:0      收藏:0   ...

随机推荐

  1. nodejs中异步

    nodejs中的异步 1 nodejs 中的异步存在吗? 现在有点 javascript 基础的人都在听说过 nodejs ,而只要与 javascript 打交到人都会用或者是将要使用 nodejs ...

  2. Ionicons的使用

    安装 参考Ionicons npm install react-native-vector-icons --save 这时候可能会报错:npm WARN deprcated lodash@4.2.0: ...

  3. perl 正则表达式之漫游

    废话不多说了,直奔主题~ 一.简单模式进行匹配 将模式写在一对//中即可,匹配对象是$_ 元字符:圆括号()      进行模式分组 点号   .        能匹配任意一个字符,除换行符(\n)以 ...

  4. 游戏UI框架设计(四) : 模态窗体管理

    游戏UI框架设计(四) --模态窗体管理 我们在开发UI窗体时,对于"弹出窗体"往往因为需要玩家优先处理弹出小窗体,则要求玩家不能(无法)点击"父窗体",这种窗 ...

  5. 10条建议让你创建更好的jQuery插件

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...

  6. 11g R2 RAC启动关闭步骤

    1.关闭监听 /u01/app/11.2.0/grid/bin/srvctl stop listener -n redhat-rac01 /u01/app/11.2.0/grid/bin/srvctl ...

  7. tp框架基础知识

    作者:黄力军 index.php入口文件:作用,所有tp框架里的内容要想访问文件.都要走index.php文件他是整个程序的入口 Application代表应用程序的目录   所有写的应用程序放这里 ...

  8. 好多鱼 Java

    牛客网的题目: 链接:https://www.nowcoder.com/questionTerminal/e3dd485dd23a42899228305658457927牛牛有一个鱼缸.鱼缸里面已经有 ...

  9. 机器学习基石 1 The Learning Problem

    机器学习基石 1 The Learning Problem Introduction 什么是机器学习 机器学习是计算机通过数据和计算获得一定技巧的过程. 为什么需要机器学习 1 人无法获取数据或者数据 ...

  10. C# 使用 USB转串 接收数据 问题

    C# 使用 USB转串 接收数据的 问题 硬件设备是MicroUSB接口,通过USB转串驱动接入PC机.自己用winForm写了一个读取串口数据的小程序,总是接收不到数据. 用传sscom32串口工具 ...