ViewPager—02图片无限轮播
布局文件
<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图片无限轮播的更多相关文章
- Android实现广告页图片无限轮播
一.概述 对于一个联网的Android应用, 首页广告无限轮播基本已经成为标配了. 那么它是怎么实现的呢? 有几种实现方式呢? 二.无限轮播的实现 1.最常规的手段是用 ViewPager来实现 2. ...
- iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)
这两天使用Reveal工具查看"手机淘宝"App的UI层次时,发现其图片轮播使用了三个UIButton的复用来实现的图片循环无缝滚动.于是乎就有了今天这篇博客,看到“手机淘宝”这个 ...
- iOS开发之ImageView复用实现图片无限轮播
在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageVi ...
- iOS 两种不同的图片无限轮播
代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...
- ViewPager实现图片的轮播
在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的pos ...
- iOS实现图片无限轮播之使用第三方库SDCycleScrollView(转)
下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView #import "ViewController.h" # ...
- ViewPager实现无限轮播踩坑记
最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对 ...
- ViewPager无限轮播与自定义切换动画
一直在寻求一个能用得长久的ViewPager,寻寻觅觅终于发现,ViewPager有这一个就够了. 注:并非完全原创 先看一下效果: 淡入淡出: 旋转: 无限轮播的ViewPager 主要设计思路(以 ...
- iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43 阅读:630 评论:0 收藏:0 ...
随机推荐
- htmlunit 导致高cup占用的坑
原文:http://blog.csdn.net/qq_28384353/article/details/52974432#reply 将爬虫部署到服务器上运行后,在查看服务器的状态监控时发现,天猫爬虫 ...
- Ognl值栈对象及struts标签
用户每次访问struts的action,都会创建一个Action对象.值栈对象.ActionContext对象:然后把Action对象放入值栈中: 最后再把值栈对象放入request中,传入jsp页面 ...
- WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
XAML代码部分:1.引用System.Windows.Interactivity 2.为指定的控件添加一个拖动的行为 3.很简单的了解行为的作用和用法 <Window xmlns=" ...
- JVM——深入分析对象的内存布局
概述 一个对象本身的内在结构需要一种描述方式,这个描述信息是以字节码的方法存储在方法区中的.Class本身就是一个对象,都以KB为单位,如果new Integer()为了表示一个数据就占用KB级别的内 ...
- 2017-3-10 SQL server 数据库 T--SQL语句
创建数据库:create datebase 数据库名 注:数据库名不能为中文,不能数字开头,不能符号开头. 删除数据库:drop datebase 数据库名 创建表:create tab ...
- storm1.0节点间消息传递过久分析及调优
序:最近对storm平台系统进行性能检测发现偶尔会出现oncebolt向另一个twobolt发送数据后,twobolt要500毫秒后才接收到进行处理.这里简单说增大twobolt的并行度即可解决,但是 ...
- App对接支付宝移动支付功能
前段时间看了下app对接支付宝移动支付的功能,并自己总结了下支付宝移动支付的实现流程 一.申请流程 前提是已有现成的应用. 1. 申请地址 https://b ...
- php线程安全与非线程安全版的区别
Thread Safe(线程安全)和 None Thread Safe(非线程安全) 背景: Linux/Unix系统采用多进程的工作方式,而Windows系统采用多线程的工作方式. CGI模式是建立 ...
- C++ Primer 5 CH5 语句
5.1 简单语句 空语句: ; 5.2 语句作用域 5.3 条件语句 switch 语句:表达式与某个 case 匹配成功,执行 case 之后的语句直到 break 或者 switch 结尾,cas ...
- Android开发之音乐播放器
做了一天的音乐播放器小项目,已经上传到github,将链接发到这里供大家参阅提议 https://github.com/wangpeng0531/MusicPlayer.git