ViewPager的使用

ViewPager可以实现页面的滚动功能,通常配合PagerTabStrip或者PagerTitleStrip一起使用,从而显示标题。如果要使用PagerTabStrip或者PagerTitleStrip的话,需要把它们作为ViewPager的子控件使用,同时应该设置它们的属性layout_gravity为top或者bottom,表示标题显示在顶部或者底部。ViewPager其实只是一个空页面,需要像ListView一样由PagerAdapter提供内容;

当你实现一个PagerAdapter时,至少需要重载以下几个方法:

当我们使用了PagerTitleStrip或者PagerTabStrip是还需要重载getPageTitle(int position);

示例如下:

布局文件:activity_main.xml

<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="com.example.viewpagerdemo.MainActivity" >

   <android.support.v4.view.ViewPager
       android:id = "@+id/viewpager"
       android:layout_width = "wrap_content"
       android:layout_height = "wrap_content"
       android:layout_gravity = "center" >
       
       <android.support.v4.view.PagerTitleStrip
           android:id = "@+id/pagertitle"
           android:layout_width = "wrap_content"
           android:layout_height = "wrap_content"
           android:layout_gravity = "top" />
       </android.support.v4.view.ViewPager>

</RelativeLayout>
tab1.xml:tab2.xml与tab3.xml基本一样,只是其中的id和text不一样;

<?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" >
    <TextView
        android:id = "@+id/tab1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text = "text1" />

</LinearLayout>
主活动:MainActivity

package com.example.viewpagerdemo;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;


public class MainActivity extends Activity {
	private ViewPager viewPager;
	private ArrayList<View> viewList ;
	private ArrayList<String> titleList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        viewPager = (ViewPager)findViewById(R.id.viewpager);
        viewList = new ArrayList<View>();
        viewList.add(getLayoutInflater().inflate(R.layout.tab1, null));
        viewList.add(getLayoutInflater().inflate(R.layout.tab2, null));
        viewList.add(getLayoutInflater().inflate(R.layout.tab3, null));
        titleList = new ArrayList<String>();
        titleList.add("语文");
        titleList.add("数学");
        titleList.add("英语");
        PagerAdapter pagerAdapter = new 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;
			}
			
			public void destroyItem(ViewGroup container,int position,Object object)
			{
				container.removeView(viewList.get(position));
			}
			
			public Object instantiateItem(ViewGroup container,int position)
			{
				container.addView(viewList.get(position));
				return viewList.get(position);
			}
        	public CharSequence getPageTitle(int position)
        	{
        		return titleList.get(position);
        	}
        };
        viewPager.setAdapter(pagerAdapter);
    }

    @Override
    public 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;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
关于 getLayoutInflater()

至于其运行结果虽然可以实现页面的滑动,但是与我们常见的应用却有区别,因为其标题栏也会随着页面的滑动而滑动,给人以一种不和谐的感觉,若要实现标题栏不动的效果,需要自己定义光标;
实现标题栏不动的自定义光标的方法:

示例:

main_activity.xml:

<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"
    tools:context="com.example.viewpagercursor.MainActivity" >

    <ImageView
        android:id = "@+id/cursor"
        android:layout_width="match_parent"
        android:layout_height = "wrap_content"
        android:scaleType="matrix"
        android:src = "@drawable/ic_launcher" />
    <android.support.v4.view.ViewPager
        android:id = "@+id/viewpager"
        android:layout_width = "wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />"
</LinearLayout>
其他布局文件与前面的一样;

MainActivity:

package com.example.viewpagercursor;

import java.util.ArrayList;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
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.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;


public class MainActivity extends Activity {
	private ArrayList<View> viewContainer;
	private ViewPager viewPager;
	private ImageView cursor;
	
	private int bmpw = 0; //保存图片的宽度
	private int offest = 0;   //偏移
	private int currIndex = 0;  //页面编号
    @SuppressWarnings("deprecation")
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager)findViewById(R.id.viewpager);
        cursor = (ImageView)findViewById(R.id.cursor);
        viewContainer = new ArrayList<View>();
        
        viewContainer.add(getLayoutInflater().inflate(R.layout.tab1, null));
        viewContainer.add(getLayoutInflater().inflate(R.layout.tab2, null));
        viewContainer.add(getLayoutInflater().inflate(R.layout.tab3, null));
        
        PagerAdapter pagerAdapter = new PagerAdapter()
        {

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

			@Override
			public boolean isViewFromObject(View arg0, Object arg1) {
				// TODO Auto-generated method stub
				return arg0 == arg1;
			}
			
			public void destroyItem(ViewGroup container,int position, Object object)
			{
				container.removeView(viewContainer.get(position));
			}
			
			public Object instantiateItem(ViewGroup container,int position)
			{
				container.addView(viewContainer.get(position));
				return viewContainer.get(position);
			}
        	
        };
        initCursor();
        viewPager.setAdapter(pagerAdapter);
        
        viewPager.setOnPageChangeListener(new OnPageChangeListener()
        {
        	int one = offest*2 + bmpw;
        	int two = one *2;
			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub
				
			}

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

			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				Animation animation = null;
				switch(arg0)
				{
				case 0:
				{
					if(currIndex == 1)
						animation = new TranslateAnimation(one,0,0,0);
					else if(currIndex == 2)
						animation = new TranslateAnimation(two,0,0,0);
					break;
				}
				case 1:
				{
					if(currIndex == 0)
						animation = new TranslateAnimation(offest,one,0,0);
					else if(currIndex == 2)
						animation = new TranslateAnimation(two,one,0,0);
					break;
				}
				case 2:
				{
					if(currIndex == 0)
						animation = new TranslateAnimation(offest,two,0,0);
					else if(currIndex == 1)
						animation = new TranslateAnimation(one,two,0,0);
					break;
				}
				}
				currIndex = arg0;
				animation.setFillAfter(true);
				animation.setDuration(300);
				cursor.startAnimation(animation);
			}
        	
        });
    }
    public void initCursor()
    {
    	
    	bmpw = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher).getWidth();
    	DisplayMetrics dm = new DisplayMetrics();
    	getWindowManager().getDefaultDisplay().getMetrics(dm);
    	int screenW = dm.widthPixels;
    	offest = (screenW/viewContainer.size()-bmpw)/2;
    	Matrix matrix = new Matrix();
    	matrix.postTranslate(offest, 0);  //水平平移offest
    	cursor.setImageMatrix(matrix);    //设置初始位置
    }
    @Override
    public 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;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

关于 Matrix ;

关于Animation  ;

       上面的代码实现了游标的滚动,把一张图片作为游标,其实还可以像其他APP一样实现上面是标题栏,然后是游标,再下面是内容,实现方法差不多,可以参考ViewPager实现多页面滚动以及动画



——每天都要有进步








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值