通过我们前面的学习,我们知道ViewPager是可以做出近乎完美的滑动体验,回顾整个Android,我们发现Gallery具备同样的特点,于是我们大胆地猜想,Gallery是否和ViewPager之间有些关联呢?两者在功能上的类似和重叠,总会让我们对此充满好奇,我们开始思考:如果不借助Gallery,我们能否做出像Gallery一样的效果呢?答案是肯定的。那么,我们今天就来一起学习自己动手打造一个Gallery吧。

首先讲述下原理,和前面一样,当我们继承PagerAdapter这个类时,一般会传入一个View类型的数组,这样在ViewPager绑定了这个适配器类时,就能将这个View数组里的View对象显示出来。在这里,View可以是一个布局,也可以是某个控件,甚至是任何继承自View的控件。所以,我们同样可以传入一个ImageView作为这个View对象啊。好,明白了原理,我们就来开始今天的学习吧!

首先来看布局代码,ViewPager是必不可少的一个控件。

<LinearLayout 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"android:orientation="vertical"android:background="#000000"tools:context=".MainActivity" ><android.support.v4.view.ViewPager android:id="@+id/ViewPager"android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</LinearLayout>

接下来是那个百用不厌的ViewPagerAdapter类,继承自PagerAdapter:

package com.Android.ViewPager4Gallery;import java.util.ArrayList;import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;public class ViewPagerAdapter extends PagerAdapter {private ArrayList<View> Views;//存放View的ArrayList/** ViewAdapter构造函数* @author:Robin*/public ViewPagerAdapter(ArrayList<View> Views){this.Views=Views;}/** 返回View的个数*/@Overridepublic int getCount() {if(Views!=null){return Views.size();}return 0;}/** 销毁View*/@Overridepublic void destroyItem(View container, int position, Object object) {((ViewPager)container).removeView(Views.get(position));}/** 初始化*/@Overridepublic Object instantiateItem(View container, int position) {((ViewPager)container).addView(Views.get(position),0);return Views.get(position);}/** 判断View是否来自Object*/@Overridepublic boolean isViewFromObject(View view, Object object) {return (view==object);}}

然后就是核心的代码部分了,代码已经做好了注释,写得很明白,不再赘述了

package com.Android.ViewPager4Gallery;import java.util.ArrayList;import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;public class MainActivity extends Activity implements OnPageChangeListener {//图像资源private int[] Resources=new int[]{R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image5,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image10,R.drawable.image11,R.drawable.image13,R.drawable.image16,R.drawable.image17,R.drawable.image18,R.drawable.image19,R.drawable.image21,R.drawable.image22,R.drawable.image23,R.drawable.image24,R.drawable.image25,R.drawable.image27,R.drawable.image28,R.drawable.image29};//适配器private ViewPagerAdapter mAdapter;//View数组private ArrayList<View> Views;//ViewPagerprivate ViewPager mViewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//初始化ViewsViews=new ArrayList<View>(Resources.length);for(int i=0;i<Resources.length;i++){ImageView image=new ImageView(this);image.setImageResource(Resources[i]);image.setScaleType(ImageView.ScaleType.FIT_XY);image.setAdjustViewBounds(true);Views.add(image);}//初始化ViewPagermViewPager=(ViewPager)findViewById(R.id.ViewPager);//初始化适配器mAdapter=new ViewPagerAdapter(Views);//绑定mViewPager.setAdapter(mAdapter);//事件注册mViewPager.setOnPageChangeListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {//Toast.makeText(this, "你滚动了ViewPager", Toast.LENGTH_SHORT).show();}@Overridepublic void onPageSelected(int position) {Toast.makeText(this, "这是第"+position+"张图片", Toast.LENGTH_SHORT).show();}}

最终运行效果如下:

今天的内容就是这样了,快考试了,能写博客的时间不多咯!呵呵

ViewPager相关文章:

1、Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

2、Android开发学习之基于ViewPager实现Gallery画廊效果

3、Android开发学习之使用ViewPager+PagerTabStrip制作可滑动的Tab

4、Android开发学习之使用ViewPager打造应用引导界面面

Android开发学习之基于ViewPager实现Gallery画廊效果相关推荐

  1. Android开发学习之基于ZBar实现微信扫一扫

    蛰伏半月有余,一直在准备期末考试,期间抽空研究了一些Android的源代码,现在我就把在这其中的一些收获分享给大家. 今天想分享给大家的是二维码扫描.说起二维码,大家一定不会陌生,尤其是微信火了以后, ...

  2. (4.2.29) Android开发学习之基于ZBar实现微信扫一扫

    蛰伏半月有余,一直在准备期末考试,期间抽空研究了一些Android的源代码,现在我就把在这其中的一些收获分享给大家. 今天想分享给大家的是二维码扫描.说起二维码,大家一定不会陌生,尤其是微信火了以后, ...

  3. ViewPager实现Gallery画廊效果——仿慕课网app-求职路线计划-效果(一)

    效果图: 大体上就是这个样子,可能不太清楚 但是大家知道是什么效果就好啦~ (PS: 图中没有加高斯模糊图,后边 我会加上) 下面来分析一下这个布局 底层用一个ImageView 上层用一个定制的Vi ...

  4. ViewPager实现Gallery画廊效果——仿慕课网app-求职路线计划-效果(二)

    今晚给之前的写的收个尾 http://blog.csdn.net/codenoodles/article/details/50992113 前边没有看的可以先看一下效果. 之前写的没有背景的模糊图片效 ...

  5. Android开发学习之以CameraAPI方式实现相机功能(一)——快速实现相机

    今天无意当中发现在<Android开发学习之基于ZBar实现微信扫一扫>中的一部分代码可以用来以硬件方式实现一个照相机的功能,在<Android开发学习之调用系统相机完成拍照的实现& ...

  6. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)

    一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于Intelli ...

  7. android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  8. 《Android Studio应用开发实战详解》——第1章,第1.5节Android开发学习路线图

    本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.5节Android开发学习路线图,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区& ...

  9. android 壁纸服务,Android开发学习之WallPaper设置壁纸详细介绍与实例

    今天和大家分享的是关于在android中设置壁纸的方法,在android中设置壁纸的方法有三种,分别是: 1.使用wallpapermanager的setresource(int resourceid ...

最新文章

  1. SAP PM交叉申请时间表
  2. adf4351_使用ADF BC管理保存点
  3. iOS_9_scrollView分页
  4. niginx反向代理解决前后端跨域问题
  5. 俄罗斯博士用树莓派自制灭蚊武器!
  6. php xml getattribute,PHP XMLReader getAttribute()用法及代码示例
  7. linux open函数使用,linux中open函数使用
  8. 【Django】毕设学习笔记(六)
  9. JavaScript-DOM(2)
  10. 宽幅FLASH产品展示代码多图带左右显示按钮 - 图
  11. 油猴脚本Tampermonkey初体验
  12. FireFox的插件范例,竟然有问题
  13. ArcGIS数据降雨量插值
  14. tomcat小版本升级
  15. 抖音电脑版怎么自动播放视频?
  16. 软件测试-白盒测试:逻辑覆盖
  17. 如何使用canvas进行画图
  18. day8-字符串作业
  19. box-shadow的具体使用方法(一分钟详解)
  20. Windows Store协议(ms-windows-store)解析和使用

热门文章

  1. B6-简析响应者链条
  2. Re:[转]Microsoft .Net Remoting系列专题
  3. Advanced Wlan Attacks (RADIUS)
  4. sql server中数据约束相关的查询
  5. JQGrid 在页面加载时展开SubGrid
  6. 3.3 其他因素3.3.1 Fork子进程
  7. linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
  8. 我理解设计模式C++实现观察者模式Observer Pattern
  9. VC调用Delphi对象接口
  10. C#中StreamWriter与BinaryWriter的区别兼谈编码。