关闭

ViewPager的简单使用

标签: viewpager
90人阅读 评论(0) 收藏 举报

<p>
今天记录一下ViewPager一些简单的应用</p><p>跟ListView一样,也是需要使用到适配器,ViewPager的适配器使用PagerAdapter</p><p>需要注意的是ViewPager作为控件放置到布局中,要将包名也输入进去</p><p>xml文件如下:</p>

</pre><pre name="code" class="html"><RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <ImageView 
        android:id="@+id/item_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
	
    <TextView 
        android:id="@+id/item_it"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
    
</LinearLayout>




以下是完成图片的滑动切换

代码如下:

package com.example.viewpagerdemo;

import java.util.ArrayList;

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.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.Activity;
import android.content.pm.ActivityInfo;

public class MainActivity extends Activity implements OnPageChangeListener{
	ViewPager vp;
	ArrayList<View> views = new ArrayList<View>();
	String[] strs = {"ahelpi1","ahelpi2","ahelpi3","ahelpi4"};
	//布局过滤器
	LayoutInflater li;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	
		//实例布局过滤器
		li = LayoutInflater.from(this);
		//设置内容的方法要在ViewPager前调用
		setContent();
		vp = (ViewPager) findViewById(R.id.viewPager);
		//创建适配器对象
		MyAdapter my = new MyAdapter();
		//有ViewPager调用setAdapter()方法,就能自动调用。
		vp.setAdapter(my);
		//设置当前元素
		vp.setCurrentItem(2);
		//设置监听者
		vp.setOnPageChangeListener(this);
	}
	
	/**
	 * 设置内容
	 */
	public void setContent() {
		for (int i = 0; i < 4; i++) {
			//第一个参数为布局文件的id,返回的是View,把文件过滤返回成View
			View view = li.inflate(R.layout.viewpager_item, null);
			//Activity的findViewById()只能找到当前布局的空间,不能切换View
			ImageView iv = (ImageView) view.findViewById(R.id.item_iv);
			TextView tv =  (TextView) view.findViewById(R.id.item_it);
			String name = strs[i];
			int id = getResources().getIdentifier(name, "drawable", getPackageName());
			iv.setImageResource(id);
			tv.setText("第"+(i+1)+"个:");
			//往集合中添加整个视图,不能只添加控件
			views.add(view);
		}
		
	}
	
	/**
	 * 配置ViewPager的适配器
	 */
	public class MyAdapter extends PagerAdapter{
		
		/**
		 * 确定可以配到到ViewPager上的内容的个数
		 */
		@Override
		public int getCount() {
			return views.size();//返回集合的长度即View的个数
		}
		
		/**
		 * 用来判断设置到ViewPager上的内容是否是视图View
		 * arg1就是传进来的东西,如果arg0和arg1是一样的,代表传进来的元素是View
		 * 用内存地址值判断arg0和arg1是否一样
		 */
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0==arg1/*添加进来的内容是View*/;
		}
		
		/**
		 * 添加元素
		 * ViewGroup:视图组
		 * container:适配哪个ViewPager就显示哪个ViewPager。即表示是ViewPager
		 * position:即将要添加到显示范围内的视图的角标。
		 */
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			//返回的Object为添加的元素(视图)
			container.addView(views.get(position));
			return views.get(position);
		}
		
		/**
		 * 去除旧元素
		 * container:正在配置的ViewPager
		 * position:要去除的视图的角标
		 */
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
//			super.destroyItem(container, position, object);这个方法要去掉
//			container.removeViewAt(position);
			container.removeView(views.get(position));
		}
	}
	
	/**
	 * 触摸的状态变化时,会调用此方法
	 */
	@Override
	public void onPageScrollStateChanged(int arg0) {
		System.out.println("StateChanged"+arg0);
	}
	
	/**
	 * 设置滑动幅度和速度切换视图
	 * 只有滑动才会调用此方法
	 * 第一个参数是触摸状态:滑动为1,停下为0;
	 * 第二个参数为滑动的比例:从左往右从0到将近1,从又往左从将近1到0;
	 * 第三个参数为滑动的像素值(px)
	 */
	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		System.out.println("Scrolled---0"+arg0);
		System.out.println("Scrolled---1"+arg1);
		System.out.println("Scrolled---2"+arg2);
	}
	
	@Override
	public void onPageSelected(int arg0/*第几个界面*/) {
		//到最后一个界面
		if (arg0==views.size()-1) {
//			vp.setCurrentItem(0);//这个方法比较慢
			vp.setCurrentItem(0, false);//如果为false快速设置到指定页面
		}else if (arg0==0) {
			vp.setCurrentItem(views.size()-2, false);
		}
	}
	
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14355次
    • 积分:372
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章存档