ViewPager实现引导页
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实现引导页的更多相关文章
- ViewPager之引导页
一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 本文介绍ViewPager最基础的应用:在多个View之间进行切换,亦即ViewP ...
- ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)
1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...
- ViewPager滑动引导页
ViewPager实现Animation动画引导页 http://blog.csdn.net/ye_scofield/article/details/44831357 SurfaceView实现动 ...
- ViewPager—01引导页的制作
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- 安卓第一次启动引导页使用ViewPager实现
我们在安装某个APP的时候,基本都会有一个引导页的提示,他们可以打广告,或者介绍新功能的加入和使用说明等.一般都支持滑动并且下面有几个点,显示共有多少页和当前图片的位置,在IOS上这个实现起来比较简单 ...
- ViewPager打造轮播图(Banner)\引导页(Guide)
今年7月时,在Github发布了一个开源的Banner库,虽然Star不多,但还是有少部分人使用. Banner效果: 昨天,有使用此库的同学提出需求,想在引导页的时候用这个库并且最后一页有进入按钮 ...
- Android ViewPager欢迎页+引导页+进入首页
import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences ...
- android使用ViewPager实现欢迎引导页
android使用ViewPager实现欢迎引导页 大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面.当第二次启动的时候,则直接进入主界面. 这种效果一 ...
- Android特效专辑(二)——ViewPager渲染背景颜色渐变(引导页)
Android特效专辑(二)--ViewPager渲染背景颜色渐变(引导页) 首页:http://blog.csdn.net/qq_26787115/article/details/50439020 ...
随机推荐
- NginxWeb服务器安装
1. 安装编译工具和库文件 [root@bigdata-51cdh opt]# yum -y install make zlib zlib-devel gcc-c++ libtool opens ...
- Centos下搭建 tomcat https服务器详解(原创)
一 .安装java jdk配置环境变量 1. 卸载原有openjdk yum -y remove java-1.7.0-openjdk* yum -y remove tzdata-java.noarc ...
- 工业物联网或系统集成中应用消息队列(ActiveMQ,C#的demo)的场景全面分析
1.[连载]<C#通讯(串口和网络)框架的设计与实现> 2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 2.应用SuperIO(SIO)和开源跨平台物联网框 ...
- Lind.DDD.SSO单点登陆组件的使用(原创)
回到目录 一般sso的说明 在Lind.DDD框架里,有对单点登陆的集成,原理就是各个网站去sso网站统一登陆授权,之后在sso网站将登陆的token进行存储,存储方式随你(cache,redis,m ...
- 重新诠释的OSGi规范
上周五部门开会讨论新一代产品(基于.net Winform)的设计规范,从设计规范慢慢讨论到体系结构等架构存在的问题,诸如菜单.工具条.状态条.界面布局等不能实现配置化和自动化,子系统之间拥有强依赖, ...
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本 ,请添加处理程序。如果下载文件,请添加 MIME 映射。 IIS站点中添加WCF项目后浏览网站报错解决方法。
vs2013 wcf服务 windows10 家庭中文版 上图中的红色没有出现就按照下面的方法做: 按照上图所示勾选. 刷新上图中你的网站,查看上图右边的内容是否出现,如果出现,再次重新浏览网站,看一 ...
- 弹出层layer的使用
弹出层layer的使用 Intro layer是一款web弹层组件,致力于服务各个水平段的开发人员.layer官网:http://layer.layui.com/ layer侧重于用户灵活的自定义,为 ...
- android版扫扫图书应用源码
书,是人类的灵魂. 扫扫图书是一个让你懂得如何去选择一本书的APP. 这里你可以扫描条形码查询图书, 你也可以关键字搜索,遇到合乎你口味的书, 你还可以看看别人的读书笔记,不同角度去体会. 注:请允许 ...
- NSURLConnection学习笔记
虽说现在都用三方库来获取网络数据,再不济也会用苹果官方的NSURLSession,但有些东西还是要先学会才有资格说不好不用,不是么? NSURLConnection发送请求是分为同步和异步两种方式的, ...
- 在项目中使用ExtJS
主要目录文件介绍 builds:压缩后的ExtJS代码,体积更小,更快:docs:开发文档:examples:官方演示示例:locale:多国语言资源文件:pkgs:ExtJS各部分功能的打包文件:r ...