第一步:在layout布局文件里加入主布局文件viewpager_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:gravity="center"android:id="@+id/vp"><android.support.v4.view.PagerTabStripandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/tap"></android.support.v4.view.PagerTabStrip></android.support.v4.view.ViewPager></LinearLayout>注意事项:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:src="@mipmap/a1"android:scaleType="centerCrop"android:id="@+id/iv1" /></LinearLayout>第三步:Java中Activity的实现代码ViewPagerDemo.java(这里未设置pagerTabStrip的属性):
import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;/*** Created by panchengjia on 2016/12/1.*/public class ViewPagerDemo extends AppCompatActivity {private ViewPager vp;//声明存储ViewPager下子视图的集合ArrayList<View> views = new ArrayList<>();//显示效果中每个视图的标题String[] titles={"一号美女","二号美女","三号美女","四号美女"};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.viewpager_layout);vp= (ViewPager) findViewById(R.id.vp);initView();//调用初始化视图方法vp.setAdapter(new MyAdapter());//设置适配器}//初始化视图的方法(通过布局填充器获取用于滑动的视图并存入对应的的集合)private void initView() {View v1 = getLayoutInflater().inflate(R.layout.layout1,null);View v2 = getLayoutInflater().inflate(R.layout.layout2,null);View v3 = getLayoutInflater().inflate(R.layout.layout3,null);View v4 = getLayoutInflater().inflate(R.layout.layout4,null);views.add(v1);views.add(v2);views.add(v3);views.add(v4);}class MyAdapter extends PagerAdapter{@Overridepublic int getCount() {return views.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return view==object;}//重写销毁滑动视图布局(将子视图移出视图存储集合(ViewGroup))@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(views.get(position));}//重写初始化滑动视图布局(从视图集合中取出对应视图,添加到ViewGroup)@Overridepublic Object instantiateItem(ViewGroup container, int position) {View v =views.get(position);container.addView(v);return v;}@Overridepublic CharSequence getPageTitle(int position) {return titles[position];}}}第二种:页面轮播效果视图(程序首次启动的引导页实现)
开始代码前注释:
1、本次未实现循环轮播效果;2、导航原点资源图片注解:default_holo为未选中状态,touched_holo为选中后实心状态。(也可自己用Shape绘制)
第一步:在layout布局文件里加入主布局文件viewpager_layout.xml
主布局为FrameLayout,在ViewPager(这里因为存在导航原点,不设置PagerTabStrip)上嵌套包含3个导航原点(由滑动视图数量决定)的linearLayout布局(本次设置该布局位于底部):
<?xml version="1.0" encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.administrator.myapplication11.MainActivity"><android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/vp"></android.support.v4.view.ViewPager><LinearLayoutandroid:id="@+id/point_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:orientation="horizontal"><ImageViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:src="@mipmap/default_holo"/><ImageViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:src="@mipmap/default_holo" /><ImageViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:src="@mipmap/default_holo"android:id="@+id/imageView" /></LinearLayout></FrameLayout>第二步:Layout中用于滑动切换的视图(示例中共三个layout1/2/3.xml,这里写一个典型)与第一种相同
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="centerCrop"android:src="@mipmap/genie"/></LinearLayout>第三步:Java中Activity的实现代码MainActivity.java
import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import java.util.ArrayList;/*** Created by panchengjia on 2016/11/30.*/public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{private ViewPager vp;private LinearLayout point_layout;ArrayList<View> views =new ArrayList<>();//实例化存储imageView(导航原点)的集合ArrayList<ImageView> imageViews = new ArrayList<>();int currImage;//记录当前页(导航原点)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);vp= (ViewPager) findViewById(R.id.vp);initView();//调用初始化视图方法initPoint();//调用初始化导航原点的方法vp.addOnPageChangeListener(this);vp.setAdapter(new MyAdapter());}/*将point_layout中包含的imageView(导航原点)添加到imageViewS集合中*并设置layout1(第一视图)的导航原点(对应集合0下标)的图片* 为touched_holo(触摸状态的图片)*/private void initPoint() {point_layout= (LinearLayout) findViewById(R.id.point_layout);int counnt = point_layout.getChildCount();//获取point数量for (int i=0;i<counnt;i++){imageViews.add((ImageView) point_layout.getChildAt(i));}imageViews.get(0).setImageResource(R.mipmap.touched_holo);}private void initView() {View v1=getLayoutInflater().inflate(R.layout.layout1,null);View v2=getLayoutInflater().inflate(R.layout.layout2,null);View v3=getLayoutInflater().inflate(R.layout.layout3,null);views.add(v1);views.add(v2);views.add(v3);}//OnPageChangeListener的方法,这里不做具体实现@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}//设置滑动到对应位置的视图后,导航原点的不同状态(图片)@Overridepublic void onPageSelected(int position) {ImageView preView = imageViews.get(currImage);preView.setImageResource(R.mipmap.default_holo);ImageView currView = imageViews.get(position);currView.setImageResource(R.mipmap.touched_holo);currImage = position;}//OnPageChangeListener的方法,这里不做具体实现@Overridepublic void onPageScrollStateChanged(int state) {}class MyAdapter extends PagerAdapter {@Overridepublic int getCount() {return views.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return view==object;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(views.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position) {View v = views.get(position);container.addView(v);return v;}}}至此,本次的ViewPager实现示例所需代码已完成,当然这只是ViewPager最简单的功能,后续还会更新一些ViewPager的高级用法,欢迎小伙伴们继续支持。