viewPager开启界面导航之旅

当下载一个app时,首次使用都会出现界面导航页面,今天就来写一个简单的页面导航,由于本人比较懒,随便找了一张图片,你可以按照你的想法换掉,废话少说,开始界面导航之旅

首先先写一个不到导航小圆点的界面导航,先单纯的使用viewPager实现界面滑动,然后加入小圆点即可实现常见的首次登陆出现导航页面

先上图,方便大家观看:


下面贴一下主要代码:

package com.sdufe.thea.guo;

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

import com.sdufe.thea.guo.adapter.MyNavigationAdapter;

import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener,
		OnPageChangeListener {

	private List<View> views;
	private ViewPager viewPager;
	private MyNavigationAdapter adapter;
	private View view01;
	private View view02;
	private View view03;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE);

		setContentView(R.layout.activity_main);

		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);

		viewPager = (ViewPager) findViewById(R.id.viewpager);

		views = new ArrayList<View>();

		view01 = LayoutInflater.from(this).inflate(R.layout.view01, null);
		view02 = LayoutInflater.from(this).inflate(R.layout.view02, null);
		view03 = LayoutInflater.from(this).inflate(R.layout.view03, null);
		views.add(view01);
		views.add(view02);
		views.add(view03);

		adapter = new MyNavigationAdapter(views);

		viewPager.setAdapter(adapter);
		viewPager.setOnPageChangeListener(this);
		Button begin = (Button) view03.findViewById(R.id.begin);

		begin.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		Toast.makeText(getApplicationContext(), "开启CSND之旅", Toast.LENGTH_LONG)
				.show();
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {

	}

	@Override
	public void onPageSelected(int arg0) {
		viewPager.setCurrentItem(arg0);
	}

}

以上就是主要代码了,主要是使用view填充viewpager的控件,对于viewPager的使用跟ListView是差不多的,都遇到个adapter,这里也贴一下adapter的代码,有疑问的可以留言

package com.sdufe.thea.guo.adapter;

import java.util.List;

import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;

public class MyNavigationAdapter extends PagerAdapter {
	
	List<View> views;
	
	public MyNavigationAdapter(List<View> views) {
		super();
		this.views = views;
	}

	@Override
	public int getCount() {
		if (views!=null) {
			return views.size();
		}
		return 0;
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return arg0==arg1;
	}

	@Override
	public void destroyItem(View container, int position, Object object) {
		((ViewPager)container).removeView(views.get(position));
	}

	@Override
	public Object instantiateItem(View container, int position) {
		((ViewPager)container).addView(views.get(position));
		return views.get(position);
	}
	
	

}
还有就是viewPager的布局文件了,这里给个查询viewpager的快速方法,按ctrl+shirft+T,输入viewPager即可出现你需要的内容

<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.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
	<!-- 小圆点布局 -->
    <LinearLayout
        android:id="@+id/point"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal" 
        android:visibility="gone">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:src="@drawable/point"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:src="@drawable/point"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:src="@drawable/point"/>
    </LinearLayout>

</RelativeLayout>
ok用viewPager实现左右滑动就结束了,就这么简单,搞清楚原理实现起了就很快了


下面来说一说带有小圆点的界面导航,也就是你所下载的app首次安装时出现的界面导航了


实现了基本的左右滑动,实现小圆点滑动就比较简单了,首先来个选择器,用于滑动时改变小圆点的颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="false" android:drawable="@drawable/indicator_normal"></item>
    <item android:state_enabled="true" android:drawable="@drawable/indicator_highlight"></item>
</selector>

然后初始化圆点,并且在onPageSelected(int arg0)控制圆点背景色的改变

package com.sdufe.thea.guo;

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

import com.sdufe.thea.guo.adapter.MyNavigationAdapter;

import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener,
		OnPageChangeListener {

	private List<View> views;
	private ViewPager viewPager;
	private MyNavigationAdapter adapter;
	private View view01;
	private View view02;
	private View view03;
	private LinearLayout points;
	private ImageView[] point;
	private int currentItem;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE);

		setContentView(R.layout.activity_main);

		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);

		viewPager = (ViewPager) findViewById(R.id.viewpager);

		views = new ArrayList<View>();

		view01 = LayoutInflater.from(this).inflate(R.layout.view01, null);
		view02 = LayoutInflater.from(this).inflate(R.layout.view02, null);
		view03 = LayoutInflater.from(this).inflate(R.layout.view03, null);
		views.add(view01);
		views.add(view02);
		views.add(view03);

		adapter = new MyNavigationAdapter(views);

		viewPager.setAdapter(adapter);
		viewPager.setOnPageChangeListener(this);
		Button begin = (Button) view03.findViewById(R.id.begin);

		begin.setOnClickListener(this);
		
		initPoint();
	}

	private void initPoint() {
		points=(LinearLayout) findViewById(R.id.point);
		point=new ImageView[views.size()];
		
		for (int i = 0; i < views.size(); i++) {
			point[i]=(ImageView) points.getChildAt(i);
			point[i].setEnabled(false);
			point[i].setTag(i);
		}
		
		currentItem=0;
		point[currentItem].setEnabled(true);
	}

	@Override
	public void onClick(View v) {
		Toast.makeText(getApplicationContext(), "开启CSND之旅", Toast.LENGTH_LONG)
				.show();
	}

	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {

	}

	@Override
	public void onPageSelected(int arg0) {
		point[currentItem].setEnabled(false);
		point[arg0].setEnabled(true);
		currentItem=arg0;
	}

}


结束,有疑问的留言我会回答你的问题


代码下载地址:http://download.csdn.net/detail/elinavampire/8166773


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值