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 仿百度壁纸客户端( ...
随机推荐
- 让js的forin循环禁止forin到某个属性的话要怎么做
//知识点1:for In循环是可以枚举到继承的属性的://知识点2:使用defineProperty让属性无法通过forIn枚举到://知识点3:用definedProperty重新定义一个属性药把 ...
- jQuery插件开发模式
jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践. 根据<jQuery高级编程&g ...
- Android Studio能干什么
建立系统工具包可以用来生成,测试,运行您的应用程序和软件包.构建系统是独立于Android的工作室,所以你可以调用它的Android的工作室或从命令行.在你写你的应用程序,你可以使用编译系统的特点: ...
- SpringMVC实战
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- 【前端】Sublime text3 插件LiveReload 实现实时预览
1.首先要安装插件LiveReload Sublime text3. 菜单 preferences->packages control,输入install.. 回车,输入LiveReload回车 ...
- 【CodeForces 625C】K-special Tables
题意 把1到n*n填在n*n的格子里.要求每一行都是递增的,使第k列的和最大. 分析 第k列前的格子1 2 .. 按要求填到满格,然后第k列及后面的格子,都从左到右填递增1的数. 第k列的和再加起来, ...
- BZOJ3732 Network
Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...
- JavaScript parser
JavaScript parser 和上面功能有点像,折叠JS代码,快速找到JS中类,方法的工具
- 以一个权限系统来告别WebForm —开篇
前言: 当今是互联网的时代,我们己经阻止不了它的发展了,只有跟上脚步,才不会被抛弃,松散了这么久,该紧紧了. 背景: 我之所以说以一个权限应用系统来告别我的WebForm内部系统的生涯,是缘于我自 ...
- IOS基础之(十四) KVO/KVC
资料参考: http://www.cnblogs.com/kenshincui/p/3871178.html http://www.cnblogs.com/stoic/archive/2012/07/ ...