先看看效果


布局文件如下:

<!--1.首先Viewpager 这个类是在V4这个jar包里的。使用之前必须先添加这个包。一般来说,这个jar包会默认加载到工程中
2.viewpager 的创建也是采用适配器。这个和ListView类似。只是说Viewpager 的适配器需要继承自PagerAdapter。
3.ViewPager本身是不能自动滑动的。要想实现自动滑动,必须不断的改变ViewPager当前要显示的图片  -->
<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"tools:context=".MainActivity" ><android.support.v4.view.ViewPager
        android:id="@+id/view_pager"android:layout_width="fill_parent"android:layout_height="200dp" /><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignBottom="@id/view_pager"android:orientation="vertical" android:background="#33000000"><TextView
            android:id="@+id/content"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:text="****" />
<!--用来在代码中动态的添加指示标签,就是那几个小圆点--><LinearLayout
            android:id="@+id/view_group"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" ></LinearLayout></LinearLayout></RelativeLayout>

Java代码:

package com.example.ads;import java.util.ArrayList;
import java.util.List;import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.app.Activity;public class MainActivity extends Activity {private ViewPager viewPager;private LinearLayout viewgroup;/**标题*/private TextView content;/**记录上一次位置
*/private int lastposition;/**记录activity是否可见*/private boolean isRunning=false;// 图片标题集合private final String[] imageDescriptions = { "巩俐不低俗,我就不能低俗","扑树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血屌丝的反杀" };// 图片资源IDprivate final int[] imageIds = { R.drawable.a, R.drawable.b, R.drawable.c,R.drawable.d, R.drawable.e };// 存放ImageView对象private List<ImageView> list;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);viewPager = (ViewPager) findViewById(R.id.view_pager);viewgroup = (LinearLayout) findViewById(R.id.view_group);content = (TextView) findViewById(R.id.content);list = new ArrayList<ImageView>();for (int i = 0; i < imageIds.length; i++) {//添加ImageView到List中ImageView imageView = new ImageView(getApplicationContext());imageView.setBackgroundResource(imageIds[i]);list.add(imageView);// 添加指示图标ImageView imageView2 = new ImageView(getApplicationContext());//设置图标的位置参数LinearLayout.LayoutParams params = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, -2);params.leftMargin = 15;params.bottomMargin = 3;imageView2.setLayoutParams(params);//bg是一个Selector,当把Imageview设置为enable时显示//一个颜色,false时显示另外一个颜色   imageView2.setBackgroundResource(R.drawable.bg);//默认显示第一个if (i == 0) {lastposition = 0;imageView2.setEnabled(true);} else {imageView2.setEnabled(false);}viewgroup.addView(imageView2);}viewPager.setAdapter(new MyPagerAdapter());content.setText(imageDescriptions[0]);viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - Integer.MAX_VALUE% list.size());handler.sendEmptyMessageDelayed(123, 2000);isRunning=true;//添加监听事件viewPager.setOnPageChangeListener(new OnPageChangeListener() {
/*当页面滑动的后,回调该方法*/@Overridepublic void onPageSelected(int position) {position = position % list.size();content.setText(imageDescriptions[position]);viewgroup.getChildAt(position).setEnabled(true);viewgroup.getChildAt(lastposition).setEnabled(false);lastposition = position;}@Overridepublic void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {// TODO Auto-generated method stub}@Overridepublic void onPageScrollStateChanged(int state) {// TODO Auto-generated method stub}});}
/*使用Handler不断发送消息,实现页面滑动*/Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {if (msg.what == 123) {if(isRunning){viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);handler.sendEmptyMessageDelayed(123, 2000);}}};};
/*自定义的Adapter*/class MyPagerAdapter extends PagerAdapter {@Override/*** viewPager条目数量,这里直接设置一个特别大的数值,就是* 产生Integer.MAX_VALUE这么多个条目。自动滑动也就是一直* 显示下一个,但是由于这么多条目里的图片是循环出现的,所以给* 人的感觉就是循环显示。* 需要注意的是,创建这么多的条目并不会导致内存溢出。* ViewPager并不会一次创建这么多条目。* */public int getCount() {// TODO Auto-generated method stubreturn Integer.MAX_VALUE;}/*** 实例化ViewPager的Item,返回值是当前要实例化的对象。用来后边对象的复用做判断* */@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(list.get(position % list.size()));return list.get(position % list.size());}/*** 销毁ViewPager对象的item,不能调用父类的方法,否则他会认为你没有重写这个方法而报错* */@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {System.out.println("destroyItem" + position);container.removeView((View) object);}/*** 判断view 和 Object的关系* */@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}}@Overrideprotected void onPause() {isRunning=false;super.onPause();}@Overrideprotected void onResume() {isRunning=true;super.onResume();}
}

带有滚动效果的ViewPager相关推荐

  1. android+广告栏效果,Android自定义控件之广告条滚动效果

    在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...

  2. 页面滚动时触发图片逐帧播放_如何在滚动效果上创建逐帧运动图像

    页面滚动时触发图片逐帧播放 A step by step guide on how to create that dynamic image background you see everywhere ...

  3. android 开机动画 渐变,[Parallax Animation]实现知乎 Android 客户端启动页视差滚动效果...

    前言 Parallax Scrolling (视差滚动),是一种常见的动画效果.视差一词来源于天文学,但在日常生活中也有它的身影.在疾驰的动车上看风景时,会发现越是离得近的,相对运动速度越快,而远处的 ...

  4. android数字滚动动画,数字滚动效果 RollingText

    RollingTextView 特性 使用简单,API与TextView类似,setText方法可带有上下滚动的动画 支持xml设置android:textSize/android:textColor ...

  5. html5页面可见xing,【 前端资源 网页插件 】全屏滚动效果H5FullscreenPage.js

    前提: 介于现在很多活动都使用了 类似全屏滚动效果 尤其在微信里面 我自己开发了一个快速构建 此类项目的控件 与市面上大部分控件不同的是此控件还支持元素的动画效果 并提供多种元素效果 基于zepto. ...

  6. fullPage.js去除slides的触屏滚动效果

    fullPage.js左右滚动效果,在手机,平板和笔记本上带有触屏滚动,去除的话,可以试试以下方法 修改fullpage 1.主页面引入换成fullpage.js 2. 找到setAllowScrol ...

  7. unity实现图片轮播效果_unity 背景无限循环滚动效果

    背景无限循环滚动效果如下示: 步骤如下: 导入背景图片后,设置图片的格式,如下图: 2.图片格式也可以设置是Texture格式,但是Wrap Mode 一定要是Repeat[重复发生]:然后记得App ...

  8. 实现知乎 Android 客户端启动页视差滚动效果

    http://ryanhoo.github.io/blog/2014/07/16/step-by-step-implement-parallax-animation-for-splash-screen ...

  9. 【Parallax Animation】实现知乎 Android 客户端启动页视差滚动效果

    欢迎转载,但请务必注明出处!http://ryanhoo.github.io/blog/2014/07/16/step-by-step-implement-parallax-animation-for ...

最新文章

  1. (转)Linux 下 查看以及修改文件权限
  2. winform npoi excel 样式设置
  3. Linux : find big file in the all directories
  4. Android进度条函数,Android实用笔记——使用ProgressBar实现进度条
  5. Kaggle新上比赛:地震图像的盐体分割
  6. php 得到服务器的数据$_SERVER
  7. 在cmakelists和makefile中设置opencv
  8. Day06,selenium的剩余用法、万能登录破解和爬取京东商品信息,及破解极验滑动验证码...
  9. CMake 简单入门
  10. 数值分析笔记 第一章 数值分析与科学计算引论
  11. 计算机驱动程序安装不了,Win7系统安装不了主板驱动的解决方法
  12. G729调用方法及使用wavlib播放出现颤音的解决方法
  13. 小学生计算题生成器的python实现
  14. 对称加密算法 Blowfish 和 Twofish
  15. 卸载IE9重装IE9无法安装的原因及解决方法
  16. php 获取rsa 模数,使用Python从公钥获取RSA指数和模数
  17. Win11电脑一边耳机没声音怎么办
  18. c语言数字的ascii码范围,c的ascii码值是多少?
  19. C++——求平均数、求和函数
  20. ctf题库--这是什么鬼东西

热门文章

  1. 【NOIP模拟】旷野大计算
  2. 两年经验斩获蚂蚁/头条/PingCAP Offer,牛逼了
  3. 移动电影院创造中国电影市场的新增量
  4. 手机病毒肆虐:恶意软件每天获取超3000美元收益
  5. 谷歌浏览器如何安装链克袋鼠插件
  6. 人工智能选go还是python_老程序员告诉你人工智能工程师与Python工程师有什么区别?-Go语言中文社区...
  7. Cypress代理铁电存储器FM25V10-GTR中文资料
  8. WebAssembly 学习笔记
  9. linux学习好的网站
  10. linux `uname -r`作用