Android ViewPager PagerAdapter 图片轮播
ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类。
ViewPager类需要一个PagerAdapter适配器类给它提供数据。
ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。分三个步骤来使用它:
1.在住布局文件里加入
2.加载要显示的页卡
3.在Activity里实例化ViewPager组件,并设置它的Adapter(就是PagerAdapter,方法与ListView一样的),在这里一般需要重写PagerAdapter。
当你实现一个PagerAdapter,你必须至少覆盖以下方法:
1. instantiateItem(ViewGroup, int) //返回视图对象
2. destroyItem(ViewGroup, int, Object) //销毁视图对象
3. getCount() //视图个数
4. isViewFromObject(View, Object) //一般传入arg0==arg1.用来判断两个视图是否是等价的
XML配置
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager>
在res/drawable下建立选择器
- point_selector.xml
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/activity_main"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <!-- <android.support.design.widget.TabLayout
- android:id="@+id/tablelayout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />-->
- <android.support.v4.view.ViewPager
- android:id="@+id/viewPager"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <!--系统默认PagerTabStrip和PagerTabStrip指示器的唯一区别是
- PagerTabStrip可以点,PagerTabStrip不能点-->
- <android.support.v4.view.PagerTabStrip
- android:id="@+id/pts"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- </android.support.v4.view.PagerTabStrip>
- </android.support.v4.view.ViewPager>
- </LinearLayout>
- <LinearLayout
- android:id="@+id/ll_points"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="50dp"
- android:layout_centerHorizontal="true">
- </LinearLayout>
- </RelativeLayout>
activity_main.xml
- public class MainActivity extends AppCompatActivity {
- ViewPager viewPager;
- Timer timer;
- LinearLayout ll_points;
- //TabLayout tablayout;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- viewPager = (ViewPager) findViewById(R.id.viewPager);
- initPoints();
- //tablayout = (TabLayout) findViewById(R.id.tablayout);
- viewPager.setAdapter(new MyPagerAdapter());
- //指示器也需要在设置适配器之后,还有默认不能设置成无限滚动,所以
- //tablayout.setupWithViewPager(viewPager);
- //必须在设置适配器之后设置默认中间页
- //viewPager.setCurrentItem(Integer.MAX_VALUE / 2);
- viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % 6);
- //viewPager.setCurrentItem(0);
- //设置自动轮播
- startAuto();
- viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- //无限页
- }
- int currentIndex = 0;//一开始是第0页,已经被选中
- @Override
- public void onPageSelected(int position) {
- //页面选择时
- Toast.makeText(MainActivity.this,position+"页",Toast.LENGTH_SHORT).show();
- ll_points.getChildAt(currentIndex).setSelected(false);
- ll_points.getChildAt(position % 6).setSelected(true);
- currentIndex = position % 6;
- }
- @Override
- public void onPageScrollStateChanged(int state) {
- //状态改变
- if (state == ViewPager.SCROLL_STATE_DRAGGING) {
- //停止自动滚动
- } else {
- //开始滚动
- }
- }
- });
- }
- private void initPoints() {
- ll_points = (LinearLayout) findViewById(R.id.ll_points);
- for (int i = 0; i < 6; i++) {
- View view = new View(getBaseContext());
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20,20);
- params.setMargins(10,10,10,10);
- view.setBackgroundResource(R.drawable.point_selector);
- view.setLayoutParams(params);
- ll_points.addView(view);
- }
- //默认第0个被选中
- ll_points.getChildAt(0).setSelected(true);
- }
- public void startAuto(){
- //计时器
- timer = new Timer();
- timer.schedule(new TimerTask() {
- @Override
- public void run() {
- //修改UI子线程中修改
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
- }
- });
- }
- }, 3000, 3000);
- }
- public void stop(){
- if(timer != null){
- timer.cancel();
- }
- }
- class MyPagerAdapter extends PagerAdapter {
- //每一个ViewPager就是一个页面
- List<View> mList = new ArrayList<>();
- int[] imgId = new int[]{R.mipmap.img01, R.mipmap.img02, R.mipmap.img03, R.mipmap.img04, R.mipmap.img05, R.mipmap.img06};
- public MyPagerAdapter(){
- for(int i=0; i<6; i++){
- ImageView img = new ImageView(getBaseContext());
- img.setImageResource(imgId[i]);
- img.setScaleType(ImageView.ScaleType.FIT_XY);
- mList.add(img);
- }
- }
- @Override
- public int getCount() {
- //return mList.size();
- //轮播设置最大值
- return Integer.MAX_VALUE;
- }
- @Override
- public boolean isViewFromObject(View view, Object object) {
- //判断两页是否相同,google要求这样写
- return view == object;
- }
- //加载视图对象,不要弄成View container的函数,这个已经是过期的了
- @Override
- public Object instantiateItem(ViewGroup container, int position) {
- //添加视图到ViewGroup中
- container.addView(mList.get(position % 6));
- return mList.get(position % 6);
- }
- //销毁一个视图
- @Override
- public void destroyItem(ViewGroup container, int position, Object object) {
- container.removeView(mList.get(position % 6));
- }
- String[] titles = {"第一页","第二页","第三页","第四页","第五页","第六页"};
- //给定系统的指示器的时候,需要重写getPageTitle方法
- @Override
- public CharSequence getPageTitle(int position) {
- return titles[position % 6];
- }
- }
- }
MainActivity.java
下面是使用
- android.support.design.widget.TabLayout的效果,需要导入jar studio可以远程依赖
在布局中添加TabLayout
在viewPager设置适配器后,调用setupWithViewPager(vp);但是默认不能设置无限页滚动
Android ViewPager PagerAdapter 图片轮播的更多相关文章
- Android Viewpager实现图片轮播(仿优酷效果)
1 http://blog.csdn.net/t12x3456/article/details/8160128 2 http://www.cnblogs.com/androidez/archive/2 ...
- 通过ViewPager 实现图片轮播
通过ViewPager 实现图片轮播 首先来个效果图 布局文件: LinearLayout 用来存放下方的几个小白点. <?xml version="1.0" encodin ...
- 用viewpager实现图片轮播
应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件.viewpager是android support v4 中提供的一个组件.viewpager使用需要以下几步骤: 1.在布局 ...
- Android ViewPager实现图片标题轮播和点击事件
我看别人的文章,最喜欢看有图的.然后先找图看. 那我就先上效果图: 实现了图片自动轮播,手动滑动,轮播标题,以及点击事件.下面开始: 一.资源文件: 首先是布局: <?xml version=& ...
- android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据
public class SlideShowAdView extends FrameLayout { //轮播图图片数量 private static int IMAGE_COUNT = 3; ...
- Viewpager实现图片轮播
//-------------主布局文件------------------------------------- <LinearLayout xmlns:android="http: ...
- Android 使用ViewPager 做的半吊子的图片轮播
Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...
- Android 图片轮播(最简单的)
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...
- Android学习笔记之图片轮播...
PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...
随机推荐
- iOS打包ipa 让别人设备安装你的App
首先推荐一本书<一步一步学习iOS 5编程(第二版) – PDF 中文版>在一本学习IOS入门很不错的书籍,目前,这是第一本介绍iOS 5.x 和 Xcode 4.3 的中文版书籍,尤其适 ...
- Jquery 简单的Tab选项卡特效
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python模块之socket
43.python模块之socket: Python在网络通讯方面功能强大,学习一下Socket通讯的基本方式 UDP通讯: Server: import socket port=8081 ...
- WinPcap编程(一)
0. 按着文档顺序写的. 开发环境:win10+VS2013. 配置WinPcap环境就不多说.直接给网址:http://blog.sina.com.cn/s/blog_57432f380101qh3 ...
- cut 命令使用
cut -d -f cut -c cut -d分隔符 -f分割后取的第几个字符串 cut -c从哪个字符开始取
- matlab取整
matlab取整 Matlab取整函数有: fix, floor, ceil, round.取整函数在编程时有很大用处.一.取整函数1.向零取整(截尾取整)fix-向零取整(Round towards ...
- Important Programming Concepts (Even on Embedded Systems) Part V: State Machines
Earlier articles in this series: Part I: Idempotence Part II: Immutability Part III: Volatility Part ...
- maven jetty plugin
转载:http://blog.163.com/xueling1231989@126/blog/static/1026408072013101311395492/ 前言: 在 maven 下测试调试时, ...
- Delphi重载,覆盖,多态
一.override 重载 type TFigure = class procedure Draw; virtual;//(我的理解是)父类中可以使用父类的,子类中使用子类的.与“四”是有区别的. e ...
- Pearls DP
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6647 Accepted: 3241 Description In Pe ...