1. 要使用ViewPager,必须要创建 PagerAdapter。 这里创建一个 ViewPagerAdapter来继承PagerAdapter

public class ViewPagerAdapter extends PagerAdapter{

    private List<View> views;   // 我们引导页的list
private Context context; // 上下文 public ViewPagerAdapter(List<View> views, Context context) {
this.views = views;
this.context = context;
} // 移除一个view
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);
container.removeView(views.get(position));
} // 加载一个view
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
} @Override
public int getCount() { // 必写的方法 返回当前views的数量
return this.views.size();
} @Override
public boolean isViewFromObject(View view, Object object) { //必写的方法 判断当前的view是否是我们需要的对象
return (view == object);
}
}

2. 创建我们引导页的视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--filpInterval 设置View之间切换的时间间隔 (在androidStudio上面跑不起来 可以不需要)
persistentDrawingCache 持久化绘画缓存
-->
<android.support.v4.view.ViewPager
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00000000"
android:persistentDrawingCache="animation"
android:id="@+id/viewpage"
>
</android.support.v4.view.ViewPager>
</RelativeLayout>

3. 创建引导页的图片视图 one.xml和two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:background="@drawable/guide1"/>
</LinearLayout>
<?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"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:background="@drawable/guide2"/> </LinearLayout>

 4. 在我们的activity中使用

 public class Guide extends Activity{

     private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);//加载guide.xml 视图
this.initView(); System.out.println("onCreate");
} // 初始化view
public void initView() {
/*
* Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),
不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!
而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
*
* */
LayoutInflater inflater = LayoutInflater.from(this);
views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.one, null)); // 加载视图1
views.add(inflater.inflate(R.layout.two, null)); // 加载视图2 vpAdapter = new ViewPagerAdapter(views, this); // 创建我们的 adapter
vp = (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapter); // viewpage绑定 adapter
}
}

5. 运行就有引导页的两张图片,可以来回切换。

6. 添加导航点

① 在原来的guide.xml中添加

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--filpInterval 设置View之间切换的时间间隔 (在androidStudio上面跑不起来 可以不需要)
persistentDrawingCache 持久化绘画缓存
-->
<android.support.v4.view.ViewPager
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00000000"
android:persistentDrawingCache="animation"
android:id="@+id/viewpage"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
</android.support.v4.view.ViewPager> <!-- 新添加的 放导航点用的 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_marginBottom="19dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv1"
android:src="@drawable/login_selectd"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv2"
android:src="@drawable/login_point"/>
</LinearLayout> </RelativeLayout>

② 在原来的代码的基础上添加新的代码

public class Guide extends Activity implements ViewPager.OnPageChangeListener{  // 实现监听接口

    private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views; // 导航点
private ImageView[] dots;
private int[] ids = {R.id.iv1, R.id.iv2}; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);//加载guide.xml 视图
this.initView();
this.initDots();
System.out.println("onCreate");
} // 初始化view
public void initView() {
/*
* Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),
不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!
而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
*
* */
LayoutInflater inflater = LayoutInflater.from(this);
views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.one, null)); // 加载视图1
views.add(inflater.inflate(R.layout.two, null)); // 加载视图2 vpAdapter = new ViewPagerAdapter(views, this); // 创建我们的 adapter
vp = (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapter); // viewpage绑定 adapter
vp.setOnPageChangeListener(this); // ViewPager 监听自己
} private void initDots() { // 初始化 我们的导航点
this.dots = new ImageView[this.views.size()];
for (int i=0; i<this.views.size(); i++) {
dots[i] = (ImageView) this.findViewById(this.ids[i]);
}
} // 监听 页面滑动的方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i=0; i<this.ids.length; i++) {
if (position == i) {
this.dots[i].setImageResource(R.drawable.login_selectd); // 变成选中的
} else {
this.dots[i].setImageResource(R.drawable.login_point); //变成不选中的
}
}
} //选中
@Override
public void onPageSelected(int position) { } // 滑动状态改变
@Override
public void onPageScrollStateChanged(int state) { }
}

7. 添加进入按钮

① 在two.xml中添加一个按钮

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:background="@drawable/guide2"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true" /> <!-- 添加进去按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="horizontal"
android:gravity="center"
> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="进入"
android:id="@+id/btn_start" /> </LinearLayout> </RelativeLayout>

② 监听按钮 进去MainActivity

public class Guide extends Activity implements ViewPager.OnPageChangeListener{  // 实现监听接口

    private ViewPager vp;
private ViewPagerAdapter vpAdapter;
private List<View> views; // 导航点
private ImageView[] dots;
private int[] ids = {R.id.iv1, R.id.iv2}; // 开始按钮
private Button bt; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);//加载guide.xml 视图
this.initView();
this.initDots();
System.out.println("onCreate");
} // 初始化view
public void initView() {
/*
* Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。
LayoutInflater的作用类似于 findViewById(),
不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!
而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等)。
*
* */
LayoutInflater inflater = LayoutInflater.from(this);
views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.one, null)); // 加载视图1
views.add(inflater.inflate(R.layout.two, null)); // 加载视图2 vpAdapter = new ViewPagerAdapter(views, this); // 创建我们的 adapter
vp = (ViewPager) findViewById(R.id.viewpage);
vp.setAdapter(vpAdapter); // viewpage绑定 adapter
vp.setOnPageChangeListener(this); // ViewPager 监听自己 // 进入按钮
this.bt = (Button) views.get(1).findViewById(R.id.btn_start);
this.bt.setOnClickListener(new View.OnClickListener() { // 监听
@Override
public void onClick(View v) {
Intent i = new Intent(Guide.this, MainActivity.class); // 进去MainActivity
startActivity(i);
finish(); //销毁当前的Activity
}
});
} private void initDots() { // 初始化 我们的导航点
this.dots = new ImageView[this.views.size()];
for (int i=0; i<this.views.size(); i++) {
dots[i] = (ImageView) this.findViewById(this.ids[i]);
}
} // 监听 页面滑动的方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i=0; i<this.ids.length; i++) {
if (position == i) {
this.dots[i].setImageResource(R.drawable.login_selectd); // 变成选中的
} else {
this.dots[i].setImageResource(R.drawable.login_point); //变成不选中的
}
}
} //选中
@Override
public void onPageSelected(int position) { } // 滑动状态改变
@Override
public void onPageScrollStateChanged(int state) { }
}

ViewPager实现引导页的更多相关文章

  1. ViewPager之引导页

    一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 本文介绍ViewPager最基础的应用:在多个View之间进行切换,亦即ViewP ...

  2. ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)

    1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...

  3. ViewPager滑动引导页

    ViewPager实现Animation动画引导页   http://blog.csdn.net/ye_scofield/article/details/44831357 SurfaceView实现动 ...

  4. ViewPager—01引导页的制作

    布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  5. 安卓第一次启动引导页使用ViewPager实现

    我们在安装某个APP的时候,基本都会有一个引导页的提示,他们可以打广告,或者介绍新功能的加入和使用说明等.一般都支持滑动并且下面有几个点,显示共有多少页和当前图片的位置,在IOS上这个实现起来比较简单 ...

  6. ViewPager打造轮播图(Banner)\引导页(Guide)

    今年7月时,在Github发布了一个开源的Banner库,虽然Star不多,但还是有少部分人使用. Banner效果:  昨天,有使用此库的同学提出需求,想在引导页的时候用这个库并且最后一页有进入按钮 ...

  7. Android ViewPager欢迎页+引导页+进入首页

    import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences ...

  8. android使用ViewPager实现欢迎引导页

    android使用ViewPager实现欢迎引导页 大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面.当第二次启动的时候,则直接进入主界面. 这种效果一 ...

  9. Android特效专辑(二)——ViewPager渲染背景颜色渐变(引导页)

    Android特效专辑(二)--ViewPager渲染背景颜色渐变(引导页) 首页:http://blog.csdn.net/qq_26787115/article/details/50439020 ...

随机推荐

  1. [问答] Firemonkey 控件继承后无法显示(空白)

    提问:如下安装后的 TMyPanel 能在设计期时正常显示,但 TMyPanel2 在设计期时是白板,不能正常看到,为什么? TMyPanel = class(TPanel) end; TMyCust ...

  2. c++ builder 2010 错误 F1004 Internal compiler error at 0x9740d99 with base 0x9

    今天遇到一个奇怪的问题,拷贝项目后,在修改,会出现F1004 Internal compiler error at 0x9740d99 with base 0x9 ,不管怎么改,删除改动,都没用,关闭 ...

  3. JavaScript的“原型甘露”

    今天跟朋友讨论JS的面向对象编程问题,想起了原来曾经看过一篇文章,但是看过很久想不起来了,用了很多关键词,终于用“悟透JavaScript  面向对象”这两个关键词找到了“原文”,原文地址:http: ...

  4. 利用私有的库MobileCoreServices检测正在安装的应用

    利用的私有库检测正在安装的app 分为两步:第一,通过placeholderApplications获得所有的正在安装的app的信息 第二,遍历正在安装的app的信息,根据名称获得你想检测的app是否 ...

  5. Angular版本1.2.4在IE11的IE8模式下出错解决方案

    今天,群里一个兄弟抛出一个问题(如上),截图说明. 打断点调试下,貌似是console里面的log方法出错了,如下: 这个是console的log方法,为什么错呢,继续: 我们会发现,在这里是检测fu ...

  6. 细分java环境中的JDK、JVM、JRE

    细分java环境中的JDK.JVM.JRE 近来小看了下Android,扑面而来一堆概念JDK.JVM.JRE.SDK.NDK.ADT.缕了一下,其中JDK.JVM.JRE是java环境的东西,而SD ...

  7. Android中点击隐藏软键盘最佳方法——Android开发之路4

    Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...

  8. MVC下压缩输入的HTML内容

    在MVC下如何压缩输出的HTML代码,替换HTML代码中的空白,换行符等字符? 1.首先要了解MVC是如何输出HTML代码到客户端的,先了解下Controller这个类,里面有很多方法,我们需要的主要 ...

  9. ORA-00600: internal error code, arguments: [4194]

    使用PlateSpin复制出来的一数据库服务器(Oracle 10g)在启动数据库实例时遇到"ORA-00600: internal error code, arguments: [4194 ...

  10. Ctrl-A全选这点事(C#,WinForm)

    所有的文本框,不管单行多行都Ctrl-A全选就好了吧?是啊,很方便.Windows的软件基本都是这样.可为什么我们自己制作的WinForm就默认不是这样呢?谁知道呢,可能是WinForm饱受诟病,要改 ...