Android 使用ViewPager实现左右循环滑动图片
ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵
1. 首先看一些layout下的xml
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <android.support.v4.view.ViewPager
- android:id="@+id/viewPager"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical" >
- <LinearLayout
- android:id="@+id/viewGroup"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="30dp"
- android:gravity="center_horizontal"
- android:orientation="horizontal" >
- </LinearLayout>
- </RelativeLayout>
- </FrameLayout>
使用ViewPager首先需要引入android-support-v4.jar这个jar包。自己不要忘记加
- package com.example.viewpagerdemo;
- import android.app.Activity;
- import android.os.Bundle;
- 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.view.ViewGroup.LayoutParams;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- public class TwoActivity extends Activity implements OnPageChangeListener{
- /**
- * ViewPager
- */
- private ViewPager viewPager;
- /**
- * 装点点的ImageView数组
- */
- private ImageView[] tips;
- /**
- * 装ImageView数组
- */
- private ImageView[] mImageViews;
- /**
- * 图片资源id
- */
- private int[] imgIdArray ;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup);
- viewPager = (ViewPager) findViewById(R.id.viewPager);
- //载入图片资源ID
- imgIdArray = new int[]{R.drawable.item01, R.drawable.item02, R.drawable.item03, R.drawable.item04,
- R.drawable.item05,R.drawable.item06, R.drawable.item07, R.drawable.item08};
- //将点点加入到ViewGroup中
- tips = new ImageView[imgIdArray.length];
- for(int i=0; i<tips.length; i++){
- ImageView imageView = new ImageView(this);
- imageView.setLayoutParams(new LayoutParams(10,10));
- tips[i] = imageView;
- if(i == 0){
- tips[i].setBackgroundResource(R.drawable.page_indicator_focused);
- }else{
- tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
- }
- LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
- LayoutParams.WRAP_CONTENT));
- layoutParams.leftMargin = 5;
- layoutParams.rightMargin = 5;
- group.addView(imageView, layoutParams);
- }
- //将图片装载到数组中
- mImageViews = new ImageView[imgIdArray.length];
- for(int i=0; i<mImageViews.length; i++){
- ImageView imageView = new ImageView(this);
- mImageViews[i] = imageView;
- imageView.setBackgroundResource(imgIdArray[i]);
- }
- //设置Adapter
- viewPager.setAdapter(new MyAdapter());
- //设置监听,主要是设置点点的背景
- viewPager.setOnPageChangeListener(this);
- //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
- viewPager.setCurrentItem((mImageViews.length) * 100);
- }
- /**
- *
- * @author xiaanming
- *
- */
- public 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 void destroyItem(View container, int position, Object object) {
- ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
- }
- /**
- * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
- */
- @Override
- public Object instantiateItem(View container, int position) {
- ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0);
- return mImageViews[position % mImageViews.length];
- }
- }
- @Override
- public void onPageScrollStateChanged(int arg0) {
- }
- @Override
- public void onPageScrolled(int arg0, float arg1, int arg2) {
- }
- @Override
- public void onPageSelected(int arg0) {
- setImageBackground(arg0 % mImageViews.length);
- }
- /**
- * 设置选中的tip的背景
- * @param selectItems
- */
- private void setImageBackground(int selectItems){
- for(int i=0; i<tips.length; i++){
- if(i == selectItems){
- tips[i].setBackgroundResource(R.drawable.page_indicator_focused);
- }else{
- tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
- }
- }
- }
- }
上面的代码中,当只有3张图片或者2张图片的时候,滑动存在BUG问题的修改如下
- destroyItem(View container, int position, Object object)方法中不removeView
- @Override
- public void destroyItem(View container, int position, Object object) {
- // ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]);
- }
- instantiateItem(View container, int position)增加异常扑捉
- @Override
- public Object instantiateItem(View container, int position) {
- try {
- ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0);
- }catch(Exception e){
- //handler something
- }
- return mImageViews[position % mImageViews.length];
- }
Android 使用ViewPager实现左右循环滑动图片的更多相关文章
- Android使用ViewPager实现左右循环滑动及轮播效果
边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的ViewPager(例如展示广告或者公告之类的ViewPager),可能需要自动轮播的效果,即用户在不用滑动的情况下就能够看到其 ...
- Android使用ViewPager实现无限循环滑动及轮播(附源代码)
MainActivity例如以下: package cc.ww; import java.util.ArrayList; import android.app.Activity; import and ...
- Android 使用ViewPager 做的半吊子的图片轮播
Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...
- android笔记:ViewPager实现界面的滑动
最近在学习ViewPager实现界面的滑动,拜读了郭神的博客文章,并抽取归纳了自己对ViewPager的理解. ViewPager实现界面滑动的步骤如下: 1.在xml布局内加入控件android.s ...
- android 解决ViewPager双层嵌套的滑动问题
解决ViewPager双层嵌套的滑动问题 今天我分享一下ViewPager的双层嵌套时影响内部ViewPager的触摸滑动问题 之前在做自己的一个项目的时候,遇到广告栏图片动态切换,我第一时间想到的就 ...
- android 自定义Viewpager实现无限循环
; i < imageUrls.length; i ++){ ADInfo info = new ADInfo(); info.setUrl(imageUrls[i]); info.setCon ...
- Android之ViewPager组件实现左右滑动View
什么是ViewPager VIewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用来实现左右滑动切换View的效果.如果想向下兼容需要 android-support-v4.j ...
- 详细分析Android viewpager 无限循环滚动图片
由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...
- android:使用gallery和imageSwitch制作可左右循环滑动的图片浏览器
为了使图片浏览器左右无限循环滑动 我们要自己定义gallery的adapter 假设要想自己定义adapter首先要了解这几个方法 @Override public int getCount() { ...
随机推荐
- rmi rpc restful soa 区别
rmi rpc restful soa 区别 rmi vs rpc 参考文档:http://stackoverflow.com/questions/2728495/what-is-the-differ ...
- php正则表达式总结
<?php echo 'wj'; echo '<br>'; $file = '<td>移动150卡</td><!--<td></td& ...
- effective C#之 - 使用属性代替成员变量
使用属性代替公共成员变量,一个很明显的好处是,很容易在一个地方对成员变量进行控制,例如: class Customer { private string name; public string Nam ...
- linux jdk,java ee ,tomcat 安装配置
1.把mypagekage.iso 挂载到linux操作系统中. 在VM做好配置,使用 mount /mnt/cdrom 2.把安装文件拷贝到/home cp 文件名 /home (快捷键tab) 3 ...
- 经典shell面试题整理
一.取出/etc/passwd文件中shell出现的次数 问题:下面是一个/etc/passwd文件的部分内容.题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/n ...
- Windows 设置时间同步
1.Windows Server 2008 r2 注:{}内是你要同步的外部服务器地址,例如复旦的时间同步服务器地址为:ntp.fudan.edu.cn,则完整命令如下: w32tm /config ...
- libthrift0.9.0解析(四)之TThreadPoolServer&ServerContext
TThreadPoolServer直接继承自TServer,实现类serve和stop操作. 在serve中可以接受多个连接,每个连接单独开一个线程进行处理,在每个线程中,按顺序处理该线程所绑定连接的 ...
- js页面跳转
js方式的页面跳转1.window.location.href方式 <script language="javascript" type="text/java ...
- 分享动态拼接Expression表达式组件及原理
前言 LINQ大家都知道,用起来也还不错,但有一个问题,当你用Linq进行搜索的时候,你是这样写的 var query = from user in db.Set<User>() ...
- javascript 比较对象(hashcode)
javascript 对象的比较是比较坑爹的一件事,因为javascript对象比较的是引用地址!当两个内容完全一样的对象比较: var object1={ name:"1234 " ...
