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 ...
随机推荐
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 2
我们的目标: 需求 Screen 1: 联系人列表 - 查看所有联系人 1.1 这个 screen 将显示数据库中的所有联系人. 1.2 用户可以删除任何联系人.1.3 用户可以编辑任何联系人的详细信 ...
- Web API项目中使用Area对业务进行分类管理
在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- 实现对gridview删除行时弹出确认对话框的一种简单方法
在VS2008提供的GridView中我们可以直接添加一个CommandField删除列:<asp:CommandField ShowDeleteButton="True" ...
- 学C#之设计模式系列笔记(1)策略模式
一.借鉴说明 1.<Head First Design Patterns>(中文名<深入浅出设计模式>) 2.维基百科,策略模式,https://zh.wikipedia.or ...
- bzoj3388(神奇的解法)
题目大意: 约翰的表哥罗恩生活在科罗拉多州.他近来打算教他的奶牛们滑雪,但是奶牛们非常害羞,不敢在游人如织的度假胜地滑雪.没办法,他只好自己建滑雪场了.罗恩的雪场可以划分为W列L行(1≤W≤500;1 ...
- Java中文字符处理的四大迷题
虽然计算机对英文字符的支持非常不错,我们也恨不得写的程序只会处理英文的数据,但是昨为中国人,无可避免地要处理一些中文字符.当很简单的一件事情,遇到了中文,一切就不同了!本文就会讲述实际生产环境中遇到的 ...
- jQuery fsBanner 手风琴
fsbanner是一款自定义功能丰富的响应式网站Banner手风琴特效jQuery插件.该手风琴特效兼容性很好,支持点击和鼠标滑过等触发事件,并且可添加标题或描述. 在线实例 默认 带标题 鼠标滑过 ...
- Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序
安装X Window yum groupinstall 'X Window System'
- low security dvwa--SQL Injection
登录dvwa后,点击左边的"SQL Injection",出现以下界面: 下面做一些学习总结. 第一步:用 "order by n" 获得表中的属性列数,它的意 ...