• Android初级教程:ViewPage使用详解


    转载本博客,请注明出处:http://blog.csdn.net/qq_32059827点击打开链接

    ViewPage使用之一就是轮播广告,就以此为出发点,来详细解析一下ViewPage的使用和加载机制。

    首先直接上一个damo,在代码中我也直接给出了详细的解释。然后,再在案例后边,对加载机制做一个解释。

    Demo:

    首先,配置文件:(注意引入全类名)

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewPage"
            android:layout_width="match_parent"
            android:layout_height="200dip" >
        </android.support.v4.view.ViewPager>
    
    </RelativeLayout>

    mainactivity活动代码:

    package com.itydl.viewpage;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.ImageView.ScaleType;
    
    public class MainActivity extends Activity {
    	
    	//数据源
    	List<ImageView> mImageViewLists = new ArrayList<ImageView>();
    	//准备数据,图片资源(一般来自服务器端)
    	int[] imagsIds = {
    			R.drawable.a,
    			R.drawable.b,
    			R.drawable.c,
    			R.drawable.d,
    			R.drawable.e
    	};
    
        private ViewPager mViewPager;
    
    	@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            initView();//初始化界面
            initDatas();//初始化数据
            
            
        }
    
    	private void initDatas() {
    		// 往集合里面添加Imageview对象
    		ImageView iv =null;
    		for(int i =0;i<imagsIds.length;i++){
    			iv = new ImageView(this);
    			iv.setImageResource(imagsIds[i]);
    			//强制要求图片matchparent
    			iv.setScaleType(ScaleType.FIT_XY);
    			//这样集合中就存在了5个ImageView对象
    			mImageViewLists.add(iv);
    		}
    	}
    
    	private void initView() {
    		setContentView(R.layout.activity_main);
    		//获取viewpage实例
    		mViewPager = (ViewPager) findViewById(R.id.viewPage);
    		
    		//PagerAdapter关联ViewPager,数据源间接绑定到ViewPager
    		mViewPager.setAdapter(new MyAdapter());
    	}
    
    	private class MyAdapter extends PagerAdapter{
    
    		@Override
    		public int getCount() {
    			// TODO Auto-generated method stub
    			return mImageViewLists.size();
    		}
    
    		/**
    		 * (看得见的view)
    		 * 为true的时候,复用View对象显示选中的;false时,可能显示左右加载的(看往那边拖拽)
    		 * view 当手指开始滑动时,被拖拽的View对象
    		 * obj 当前被选中的item。
    		 * 这个方法会决定哪个View加载进来,只有当前选中的view与当前的item相同时才会显示当前的view
    		 */
    		@Override
    		public boolean isViewFromObject(View view, Object object) {
    			// TODO Auto-generated method stub
    			return view == object;
    		}
    
    		/**(看不见的view)
    		 * 销毁对应position位置的item(默认加载三张,三张外的之前先被加载的view就会被销毁,传递过来的position等于那个销毁的position)
    		 * container 就是当前创建的ViewPager
    		 * object: 标记。预销毁的view会传递到这里
    		 */
    		@Override
    		public void destroyItem(ViewGroup container, int position, Object object) {
    			//下边这行代码是个坑——不可以保留,一定要注销掉才可以使用,如果不注销掉,抛出异常。
    			//super.destroyItem(container, position, object);
    			// 移除掉ViewPager中position的item对象
    			container.removeView((ImageView) object);
    		}
    
    		/**(看不见的view)
    		 * 预加载时调用,默认加载三张;当前显示一view,会预加载后边马上要显示的位置的那张view
    		 * 加载对应position位置的item
    		 * object: 标记。预加载的view会传递给这里
    		 */
    		@Override
    		public Object instantiateItem(ViewGroup container, int position) {
    			// 把position位置的对象加载出来,并且添加到ViewPager中
    			ImageView iv = mImageViewLists.get(position);
    			//Adds a child view. 向ViewPager中添加ImageView对象
    			container.addView(iv);
    			return iv;//返回显示
    		}
    		
    	}
    }
    

    详细的代码解释如上,现在运行看看结果:

    看来效果还不错,那么就紧跟脚步,把结论写在了一张图片上,那么就用一张图片来解释一下ViewPage是怎么加载的:


    现在对ViewPage用法应该是比较清楚了,您可以自己加上log日志,验证上边图片总结的内容哦。

    个人水平总有限,有更好的解释方式还望您的指正。


    欢迎关注本博客点击打开链接  http://blog.csdn.net/qq_32059827,每天花上5分钟,阅读一篇有趣的安卓小文哦。


  • 相关阅读:
    HTML5 postMessage 和 onmessage API 详细应用
    layerX
    HTML5中createPattern()
    HTML5中lineCap端点样式遇到closePath()
    [转]Modernizr的介绍和使用
    HTML5学习之路
    javascript选取文档元素
    ie不支持getElementsByClassName的解决办法
    document.images、document.forms、doucument.links——>HTMLCollection
    JavaScript 参考手册——javascript本地和内置对象、BOM、DOM
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299608.html
Copyright © 2020-2023  润新知