Android循环ViewPager(二)

上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的View,看到网上还有一种就是在自定义的Adapter中getCount中返回最大值,然后destroyItem不删除View,添加异常,说了这么多,我实验之后总是有问题,如果有弄成功的可以告知我一下,我的是三张图片~还是按照上午的那种方式就是第一个和最后一个是空View:

基础布局

看下效果吧,加了一排小圈圈,比上午的那个Demo好看:

activity_pager.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_pic"
        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_pic"
            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>

  实现Demo

自定义一个MyPicViewPagerAdapter:

		private class MyPicViewPagerAdapter extends PagerAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return viewList.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
			container.removeView(viewList.get(position));
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			// TODO Auto-generated method stub
			container.addView(viewList.get(position), 0);
			return viewList.get(position);

		}

	}

 activity中的字段:

	private ViewPager viewPager;
	private int[] srcArr = new int[] { R.drawable.eagle, R.drawable.heron,
			R.drawable.flamingo };
	private ViewGroup viewGroup;
	private List<View> viewList;
	private ImageView[] cycleList;

 activity中的onCreate中实例化的ViewPager和ViewGroup,实例化的时候加入参数

		viewPager = (ViewPager) findViewById(R.id.viewPager_pic);
		viewGroup = (ViewGroup) findViewById(R.id.viewGroup_pic);
		viewList = new ArrayList<View>();
		viewList.add(new View(this));
		for (int i = 0; i < srcArr.length; i++) {
			ImageView imageView = new ImageView(this);
			imageView.setBackgroundResource(srcArr[i]);
			viewList.add(imageView);
		}
		viewList.add(new View(this));
		// 加载小圆圈
		cycleList = new ImageView[srcArr.length];
		for (int i = 0; i < cycleList.length; i++) {
			ImageView imageView = new ImageView(this);
			imageView.setLayoutParams(new LayoutParams(10, 10));
			cycleList[i] = imageView;              //0的时候选中
			if (i ==0) {
				cycleList[i].setBackgroundResource(R.drawable.page_indicator_selected);
			} else {
				cycleList[i].setBackgroundResource(R.drawable.page_indicator_unselected);
			}

			LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
					new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
							LayoutParams.WRAP_CONTENT));
			layoutParams.leftMargin = 5;
			layoutParams.rightMargin = 5;
			viewGroup.addView(imageView, layoutParams);
		}
		viewPager.setAdapter(new MyPicViewPagerAdapter());
		viewPager.setCurrentItem(1);

  Demo重要的是循环,由于是有五个View,三个小圈圈,所以就需要改变一下选中的setOnPageChangeListener:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				for (int i = 0; i < cycleList.length; i++) {
					cycleList[i].setBackgroundResource(R.drawable.page_indicator_unselected);
					if (i == arg0-1) {
						cycleList[i].setBackgroundResource(R.drawable.page_indicator_selected);
					}
				}
				 if(arg0 == 0)
				 viewPager.setCurrentItem(viewList.size()-2);
				 else if(arg0 == viewList.size() - 1)
				 viewPager.setCurrentItem(1);
			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub

			}
		});

  最后看下效果图:

时间: 2024-10-24 05:20:24

Android循环ViewPager(二)的相关文章

android的ViewPager和Animation的一些使用(二)

Animation的部分 android的animation分为scale,rotate,tranlateAnimation,alpha这几种 start animation的方式以下几种: <span style="white-space:pre"> </span> t1_icon1.setImageResource(R.drawable.t1_frame_animation); //<span style="font-family: Aria

Android Binder分析二:Natvie Service的注冊

这一章我们通过MediaPlayerService的注冊来说明怎样在Native层通过binder向ServiceManager注冊一个service,以及client怎样通过binder向ServiceManager获得一个service,并调用这个Service的方法. Native Service的注冊 这里以MediaPlayerService举例来说明怎样在Native层注冊Service,首先来看main_mediaservice.cpp的main方法: int main(int a

Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment.使用时, 主要要依靠宿主Fragment的 getChildFragmentManager() 来获取FragmentManger.虽然看起来和在activity中添加fragment差不多, 但因为fragment生命周期及管理恢复模式不同, 其中有一些需要特别注意的地方.本文内容还包括了从Fragment迁移到v4.Fragment代码中需要改

android应用Theme(二)

第二种实现android应用Theme的方式是通过apk来实现的.下面是一个demo. 1.首先必须新建一个apk,类似的插件,然后在该apk的AndroidManifest.xml文件的application加上一个meta-data.这个是下一步查找是否是自己的插件的apk做一个标记. <meta-data android:name="skin_demo2_plugin" android:value="com.example.skindemo2.icon"

Android利用ViewPager实现滑动广告板

•android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api.而ViewPager就是其中之 一,利用它我们可以做很多事情,从最简单的导航,到页面切换菜单等等. •ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样. •本Demo向大家演示ViewPager的使用,并在用户未滑动View时,每隔5s钟自动切换到下一个View(循环切换),而当用户有Touch到

Android 关于ViewPager结合碎片Fragment的简单使用

一.      首先在xml添加ViewPager控件 我们希望每个viewpager显示一张图片 新建一个pager_item.xml的文件 代码如下 二.分析   一个ViewPager需要设置一个适配器,这个适配器可以继承FragmentStatePagerAdapter, 适配器同样需要设置数据,这个为适配器添加的是碎片.碎片可以继承Fragment,设置视图,监听等,具体图如下: 三.    上图可知,我们需要新建一个碎片先. 注意,这个继承的Fragment需要是在包android.

Android测试(二):Android 测试基础

Android测试(二):Android 测试基础 发布时间 2017年12月20日 虫师 原文:https://developer.android.com/training/testing/fundamentals.html 用户在不同的级别上与你的应用产生交互.从按下按钮到将信息下载到他们的设备上,因此,你应该在迭代开发应用程序时测试各种用例和交互. 使用迭代开发工作流 当你的应用程序进行扩展时,你可能会发现需要从服务器获取数据,与设备的传感器进行交互,可以还需要访问本地存储,或呈现复杂的用

Android:ViewPager扩展详解——带有导航的ViewPagerIndicator(附带图片缓存,异步加载图片)

大家都用过viewpager了, github上有对viewpager进行扩展,导航风格更加丰富,这个开源项目是ViewPagerIndicator,很好用,但是例子比较简单,实际用起来要进行很多扩展,比如在fragment里进行图片缓存和图片异步加载. 下面是ViewPagerIndicator源码运行后的效果,大家也都看过了,我多此一举截几张图: 下载源码请点击这里 ===========================================华丽的分割线==============

Android学习Scroller(二)——ViewGroup调用scrollTo()

MainActivity如下: package cc.ac; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.app.Activity; /** * Demo描述: * 对ViewGroup调用sc