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轮播图的更多相关文章

  1. ViewPager轮播图

    LoopViewPagerLayout无限轮播 项目地址:https://github.com/why168/LoopViewPagerLayout 支持三种动画: 支持修改轮播的速度: 支持修改滑动 ...

  2. Android广告轮播图实现

    先看效果 第一步,布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...

  3. Android开发之ViewPager实现轮播图(轮播广告)效果的自定义View

    最近开发中需要做一个类似京东首页那样的广告轮播效果,于是采用ViewPager自己自定义了一个轮播图效果的View. 主要原理就是利用定时任务器定时切换ViewPager的页面. 效果图如下: 主页面 ...

  4. Android项目实战(四十七):轮播图效果Viewpager

    简易.常用的轮播图效果ViewPager ,老技术了,记一笔留着以后ctrl C + ctrl V    需求如下: 不定张个数的ImagView轮播,右下角显示轮播点图标,每隔固定时间切换下一张,最 ...

  5. android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据

    public class SlideShowAdView extends FrameLayout { //轮播图图片数量    private static int IMAGE_COUNT = 3;  ...

  6. Android自定义控件5--轮播图广告ViewPager基本实现

    本文地址:http://www.cnblogs.com/wuyudong/p/5918021.html,转载请注明源地址. 本文开始实现轮播图广告系列,这篇文章首先实现让图片滑动起来(ViewPage ...

  7. Android自定义控件之轮播图控件

    背景 最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码.于是自己封装了一下.本篇轮播图实现原理原文出处: ...

  8. android中广告轮播图总结

    功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,set ...

  9. 仿百度壁纸客户端(二)——主页自定义ViewPager广告定时轮播图

    仿百度壁纸客户端(二)--主页自定义ViewPager广告定时轮播图 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...

随机推荐

  1. Xunit

    Attributes Note: This table was written back when xUnit.net 1.0 has shipped, and needs to be updated ...

  2. C语言浮点数除法可以精确到多少位小数

    double型的两个数相除,得到的浮点数能精确到多少位呢..用我家电脑做了个实验,编译器是Code::Blocks 13.12. 然后用电脑自带的计算器算的结果和C语言算的结果比较如图. 第一例里a= ...

  3. Azure怎么使用ftp登录

    1.下载配置文件 2.拷贝FTP的地址 3.查看配置文件里面的用户名和密码 4.登录

  4. [NOIP2010] 提高组 洛谷P1540 机器翻译

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  5. You've got to find what you love

    你必须找到你爱的东西 You've got to find what you love 史蒂夫乔布斯2005年6月在斯坦福大学毕业典礼上的演讲 I am honored to be with you ...

  6. configure new linux

    vim   http://www.cnblogs.com/wswang/p/5088078.html zsh  sh -c "$(curl -fsSL https://raw.github. ...

  7. MVC区域 视图必须派生自 WebViewPage 或 WebViewPage<TModel>

    http://blog.csdn.net/iack_ji/article/details/16965885 今天在学习 mvc区域时,将区域控制器类 外迁到其他的程序集的练习中出现了"视图必 ...

  8. C++_Eigen函数库用法笔记——The Array class and Coefficient-wise operations

    The advantages of Array Addition and subtraction Array multiplication abs() & sqrt() Converting ...

  9. LINUX下 my.cnf php.ini的位置

    my.cnf:/etc/ php.in:/usr/local/php/etc/

  10. C语言中的struct和typedef struct<转载>

    原文:http://www.nowamagic.net/librarys/veda/detail/1785 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数 ...