Android ViewPager轮播图
Android客户端开发中很多时候需要用到轮播图的方式进行重点新闻的推送或者欢迎页面的制作,下面这个轮播图效果的Deamo来自互联网再经过修改而成。
1、布局文件activity_main.xml中添加如下内容
- <android.support.v4.view.ViewPager
- android:id="@+id/viewPager"
- android:layout_width="wrap_content"
- android:layout_height="200dip" />
- <LinearLayout
- android:layout_alignBottom="@id/viewPager"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="#33000000"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/image_desc"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="@string/app_name"
- android:textColor="@android:color/white"
- android:textSize="18sp" />
- <LinearLayout
- android:id="@+id/point_group"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:orientation="horizontal"
- >
- </LinearLayout>
- </LinearLayout>
2、java代码
添加属性
- private ViewPager viewPager;
- private LinearLayout point_group;
- private TextView image_desc;
- // 图片资源id
- private final int[] images = {R.drawable.a, R.drawable.b, R.drawable.c,
- R.drawable.d, R.drawable.e};
- // 图片标题集合
- private final String[] imageDescriptions = {"第一张图片",
- "第二张图片", "第三张图片", "第四张图片", "第五张图片"};
- private ArrayList<ImageView> imageList;
- // 上一个页面的位置
- protected int lastPosition = 0;
- // 判断是否自动滚动viewPager
- private boolean isRunning = true;
- private Handler handler = new Handler() {
- public void handleMessage(android.os.Message msg) {
- // 执行滑动到下一个页面
- viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
- if (isRunning) {
- // 在发一个handler延时
- handler.sendEmptyMessageDelayed(0, 5000);
- }
- }
- };
onCreate中添加如下内容
- viewPager = (ViewPager) findViewById(R.id.viewPager);
- point_group = (LinearLayout) findViewById(R.id.point_group);
- image_desc = (TextView) findViewById(R.id.image_desc);
- image_desc.setText(imageDescriptions[0]);
- // 初始化图片资源
- imageList = new ArrayList<ImageView>();
- for (int i : images) {
- // 初始化图片资源
- ImageView imageView = new ImageView(this);
- imageView.setBackgroundResource(i);
- imageList.add(imageView);
- // 添加指示小点
- ImageView point = new ImageView(this);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100,
- 15);
- params.rightMargin = 20;
- params.bottomMargin = 10;
- point.setLayoutParams(params);
- point.setBackgroundResource(R.drawable.point_bg);
- if (i == R.drawable.a) {
- //默认聚焦在第一张
- point.setBackgroundResource(R.drawable.point_bg_focus);
- point.setEnabled(true);
- } else {
- point.setEnabled(false);
- }
- point_group.addView(point);
- }
- viewPager.setAdapter(new MyPageAdapter());
- // 设置当前viewPager的位置
- viewPager.setCurrentItem(Integer.MAX_VALUE / 2
- - (Integer.MAX_VALUE / 2 % imageList.size()));
- viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- // 页面切换后调用, position是新的页面位置
- // 实现无限制循环播放
- position %= imageList.size();
- image_desc.setText(imageDescriptions[position]);
- // 把当前点设置为true,将上一个点设为false;并设置point_group图标
- point_group.getChildAt(position).setEnabled(true);
- point_group.getChildAt(position).setBackgroundResource(R.drawable.point_bg_focus);//设置聚焦时的图标样式
- point_group.getChildAt(lastPosition).setEnabled(false);
- point_group.getChildAt(lastPosition).setBackgroundResource(R.drawable.point_bg);//上一张恢复原有图标
- lastPosition = position;
- }
- @Override
- public void onPageScrolled(int position, float positionOffset,
- int positionOffsetPixels) {
- // 页面正在滑动时间回调
- }
- @Override
- public void onPageScrollStateChanged(int state) {
- // 当pageView 状态发生改变的时候,回调
- }
- });
- /**
- * 自动循环: 1.定时器:Timer 2.开子线程:while true循环 3.ClockManger
- * 4.用Handler发送延时信息,实现循环,最简单最方便
- *
- */
- handler.sendEmptyMessageDelayed(0, 3000);
实现onDestroy方法
- @Override
- protected void onDestroy() {
- // 停止滚动
- isRunning = false;
- super.onDestroy();
- }
定义PagerAdapter子类
- private class MyPageAdapter extends PagerAdapter {
- // 需要实现以下四个方法
- @Override
- public int getCount() {
- // 获得页面的总数
- return Integer.MAX_VALUE;
- }
- @Override
- public boolean isViewFromObject(View view, Object object) {
- // 判断view和Object对应是否有关联关系
- if (view == object) {
- return true;
- } else {
- return false;
- }
- }
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- // 获得相应位置上的view; container view的容器,其实就是viewpage自身,
- // position: viewpager上的位置
- // 给container添加内容
- container.addView(imageList.get(position % imageList.size()));
- return imageList.get(position % imageList.size());
- }
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- // 销毁对应位置上的Object
- // super.destroyItem(container, position, object);
- container.removeView((View) object);
- object = null;
- }
- }
最后编译运行即可,代码分享在这:http://files.cnblogs.com/files/rwxwsblog/ViewPagerDeamo.zip
Android ViewPager轮播图的更多相关文章
- ViewPager轮播图
LoopViewPagerLayout无限轮播 项目地址:https://github.com/why168/LoopViewPagerLayout 支持三种动画: 支持修改轮播的速度: 支持修改滑动 ...
- Android广告轮播图实现
先看效果 第一步,布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...
- Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View
最近开发中需要做一个类似京东首页那样的广告轮播效果,于是采用ViewPager自己自定义了一个轮播图效果的View. 主要原理就是利用定时任务器定时切换ViewPager的页面. 效果图如下: 主页面 ...
- Android项目实战(四十七):轮播图效果Viewpager
简易.常用的轮播图效果ViewPager ,老技术了,记一笔留着以后ctrl C + ctrl V 需求如下: 不定张个数的ImagView轮播,右下角显示轮播点图标,每隔固定时间切换下一张,最 ...
- android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据
public class SlideShowAdView extends FrameLayout { //轮播图图片数量 private static int IMAGE_COUNT = 3; ...
- Android自定义控件5--轮播图广告ViewPager基本实现
本文地址:http://www.cnblogs.com/wuyudong/p/5918021.html,转载请注明源地址. 本文开始实现轮播图广告系列,这篇文章首先实现让图片滑动起来(ViewPage ...
- Android自定义控件之轮播图控件
背景 最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码.于是自己封装了一下.本篇轮播图实现原理原文出处: ...
- android中广告轮播图总结
功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,set ...
- 仿百度壁纸客户端(二)——主页自定义ViewPager广告定时轮播图
仿百度壁纸客户端(二)--主页自定义ViewPager广告定时轮播图 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...
随机推荐
- Git环境的搭建及使用
管理工具 1. Git环境的搭建 a.下载Git installer,地址:http://git-scm.com/downloads a1.参考文档地址:http://www.open-open.co ...
- OI历程日常
之前的一直没来的及记录,表示从今往后连载 10.29 蒟蒻正在紧张的备战NOIP 整改了一下faebdc学长的模拟题,T1直接可以暴力破解,T2二分,O(nlog^2n)开始二分写残了,调了半天唉,现 ...
- SpringMVC配置数据库连接池
http://www.cnblogs.com/coqn/archive/2012/08/15/SpringMvc%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E9%85%8 ...
- BZOJ3229 石子合并
Description 在一个操场上摆放着一排N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将N堆石 ...
- 以一个权限系统来告别WebForm —(一)项目整休架构设计与数据库设计
在本节我想与大家与分享一下,我所将要做的权限系统的架构和数据库的表的设计.请各位大神们对我项目中设计的不足之处进行指导,让我得以更好的写完它,留给需要它的人. 我的项目架构如下图所示: 如上图所示,在 ...
- Server Data Synchronization Via Linux rsync、rsync+inotify Between Load Balance Server
目录 . 远程文件同步的应用场景 . rsync+crontab . rsync+inotify 1. 远程文件同步的应用场景 在负载均衡集群的应用场景中,往往在多台web server的前端有一个提 ...
- sixsix团队“餐站”应用M2阶段发布报告
一.新功能 客户端 搜索功能 我们在M2中实现了对地点的搜索菜品,可以直接在主页页面中的输入框输入用户喜欢的菜品,系统将返回与对应关键字所对应的选择,更加高效直观的满足客户的口味. 菜品图片加载 我们 ...
- PS图层混合模式实例详解
PS中的很多概念都和Core Graphics中的概念相通,比如蒙版.路径.裁剪.混合模式等等.如果你对Core Graphics中的混合模式不太理解,阅读本篇文章能让你对Core Gra ...
- MyISAM和InnoDB的索引在实现上的不同
1 MyISAM只把索引载入内存,数据缓存依赖于操作系统,InnoDB把索引和数据都载入内存缓冲 2 MyISAM数据库中的数据是按照插入的顺序保存,在每个索引节点中保存对应的数据行的地址,理论上说主 ...
- [Angularjs]ng-class,ng-class-even,ng-class-odd
写在前面 最近在通过angularjs将数据绑定到前端,其中也涉及到很多新的东西,一些效果还是很有必要实现的.在使用中发现ng-class,ng-class-even.ng-class-odd的使用, ...