android使用ViewPager组件实现app引导查看页面

我们安装完app后第一次打开app,通常都会有一个翻页图片形式的app引导简介说明。下面我们来实现这个功能.ViewPager这个组件与ListView和RecyclerView在使用上有很高的相似处,所以你如果学习过以上两种列表滚动控件,可以基于它们帮助你理解ViewPager的使用。

实现步骤:

1.在左右滑动页面的界面中,通常在屏幕下方都会有一个小圆点,我们需要给这些小圆点的实现准备一些东西。在drawable目录下创建两个xml文件,一个画出未选中的圆点,一个画出选中后的圆点。

2.准备若干张图片,他们将用于引导界面上显示的部分。(图片有一些要求,为了自适应各自尺寸屏幕(平板暂时不考虑),请选择尽可能长的图片,并且重点信息在图片的上面,次要信息在下方,我们在自适应屏幕的时候会使用不显示图片下方的缩略方式,所以显示的时候以图片上半部分为核心)

3.实现ViewPager的适配器类,写一个新的类继承适配器类,并且重写一些关键方法。

4.创建一个ViewPager的显示活动类(1.活动类里的xml最好使用帧布局,可以让其他控件显示在ViewPager布局的上面。

2.活动类的xml包含一个ViewPager ,一个LinerLayout布局实现圆点,一个用于引导页面最后一页进入到app的button)

1.绘制圆点:

选中状态的圆点:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="oval">
 <size android:height="10dp" android:width="10dp"></size>
 <solid android:color="@color/colorDownBlue"/>

</shape>

效果:

未选中状态下的圆点:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="oval">
 <size android:height="5dp" android:width="5dp"/>
 <stroke android:width="0.5dp" android:color="@color/colorBlue"/>
</shape>

效果:

2.图片准备

3.实现ViewPager的适配器类,写一个新的类继承适配器类,并且重写一些关键方法。

package com.example.lenovo.mydemoapp.myPagerAdapter;

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

import java.util.List;

/**
 * Created by lenovo on 2018/5/15.
 */

public class MyPagerAdapter extends PagerAdapter {
 List<View> list;
 /**
 外部的list将从下面的构造方法中传入
 */
 public MyPagerAdapter(List<View> list){
 this.list = list;

 }

 @Override
 public int getCount() {
 return list.size();
 }

 @Override
 public boolean isViewFromObject(View view, Object object) {
 return view == object;
 }
 /**
 销毁项目
 */
 @Override
 public void destroyItem(ViewGroup container, int position, Object object) {
 //在方法参数中导入视图组container,导入已经不在当前位置的int参数position 并且从list中获取它。
 //然后在删除这个得到的ImageView的布局
 container.removeView(list.get(position));
 }
 /**
 实例化项目
 */
 @Override
 public Object instantiateItem(ViewGroup container, int position) {
 //得到当前位置,并且从list中获取布局,在添加到视图组里
 container.addView(list.get(position));
 //返回一个当前位置的ImageView
 return list.get(position);
 }

}

4.创建一个ViewPager的显示活动类(1.活动类里的xml最好使用帧布局FrameLayout,可以让其他控件显示在ViewPager布局的上面。

2.活动类的xml包含一个ViewPager ,一个LinerLayout布局实现圆点,一个用于引导页面最后一页进入到app的button

活动类的xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
 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:orientation="vertical">
 <android.support.v4.view.ViewPager
 android:id="@+id/GuidePage_ViewPager"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 </android.support.v4.view.ViewPager>
 <Button
 android:id="@+id/GuidePage_EnterButton"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_gravity="bottom"
 android:layout_marginBottom="50dp"
 android:layout_marginLeft="50dp"
 android:layout_marginRight="50dp"
 android:text="马上体验"
 android:textColor="@color/colorWhite"
 android:background="@drawable/button_background"
 android:visibility="gone"/>
 <LinearLayout
 android:id="@+id/GuidePage_point"
 android:orientation="horizontal"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="bottom|center_horizontal"
 android:layout_marginBottom="20dp"
 android:gravity="bottom"
 >
 </LinearLayout>

</FrameLayout>

活动类的Java:

package com.example.lenovo.mydemoapp; 

import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout; 

import com.example.lenovo.mydemoapp.myPagerAdapter.MyPagerAdapter; 

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

import static com.example.lenovo.mydemoapp.R.layout.activity_guide_page_the_last_page; 

/**
备注:这个布局没有添加再次进入app不再显示引导布局的逻辑判断
 */
public class GuidePage extends AppCompatActivity {
 private List<View> list;
 private int [] imageView = {R.drawable.ic_splash_1,R.drawable.ic_splash_2,R.drawable.ic_splash_3,
 R.drawable.ic_splash_4,R.drawable.ic_splash_5};
 private Button guidePage_EnterButton;
 private LinearLayout guidePage_point;
 private ViewPager guidePage_ViewPager; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_guide_page);
 guidePage_EnterButton = (Button)findViewById(R.id.GuidePage_EnterButton);
 guidePage_point = (LinearLayout)findViewById(R.id.GuidePage_point);
 guidePage_ViewPager = (ViewPager)findViewById(R.id.GuidePage_ViewPager);
 //设置点击监听
 clickDealWith();
 //添加图片到Viewpager中
 addView();
 //添加圆点到LinearLayout布局中
 addPoint(); 

 }
 public void clickDealWith(){
 guidePage_EnterButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  //后续请在此处添加startActivity(); 逻辑
  finish();
  }
 });
 /**
 给ViewPager 引导查看布局添加滑动监听
  */
 guidePage_ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
  @Override
  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  } 

  @Override
  public void onPageSelected(int position) {
  /**
  给圆点添加选中判断,选中的圆点设置point_slelct的xml,未选中的圆点全部设置point_normal的xml
   */
  for(int i=0;i< imageView.length;i++){
   if(i == position){
   guidePage_point.getChildAt(position).setBackgroundResource(R.drawable.point_select);
   }else{
   guidePage_point.getChildAt(i).setBackgroundResource(R.drawable.point_normal);
   } 

   //判断是否滑动到最后一页,如果滑动到了最后一页则显示马上体验button 

   if (position == imageView.length -1){
    guidePage_EnterButton.setVisibility(View.VISIBLE);//显示button
   }else {
    guidePage_EnterButton.setVisibility(View.GONE);//不显示button
   } 

  }
  } 

  @Override
  public void onPageScrollStateChanged(int state) {
  }
 });
 }
 /**
 添加ImageView布局到ViewPager:
 实例化一个ImageView布局,并且通过for将数组里的图片ID导入到ImageView布局里,在设置ImageView的相关参数。
 最后添加到List中,在将List放到适配器PagerAdapter里面。最后将适配器设置匹配给ViewPager 查看布局控件中
 */
 public void addView(){
 //实例化一个list集合
 list = new ArrayList<>();
 //添加布局参数:参数是父类匹配
 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewPager.LayoutParams.MATCH_PARENT,
  ViewGroup.LayoutParams.MATCH_PARENT);
 for(int i=0;i<imageView.length;i++){
  //预先实例化一个imageView 给添加图片并且添加到list 中
  ImageView iv = new ImageView(this);
  iv.setLayoutParams(layoutParams);
  //设置图片的缩放方式,这里设置的是把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
  iv.setScaleType(ImageView.ScaleType.FIT_START);
  //添加图片
  iv.setImageResource(imageView[i]);
  list.add(iv);
 }
 //导入适配器
 guidePage_ViewPager.setAdapter(new MyPagerAdapter(list)); 

 }
 /**
 添加引导界面的圆点: 

 */
 public void addPoint(){
 //根据有多少张图片添加多个圆点
 for(int i=0;i<imageView.length;i++){
  LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
   ViewGroup.LayoutParams.WRAP_CONTENT);//设置布局参数,参数为:包装内容
  /**
  设置每个圆点之间的边距
  */
  if(i<1){ //当没有图片或者只有一个圆点的时候,i小于1的时候就不设置边距
  layoutParams.setMargins(0,0,0,0); 

  }else {
  layoutParams.setMargins(10,0,0,0);//边距的参数值分别是左边,上面,右边,下面
  }
  //注意圆点也是一个ImageView的图片布局
  ImageView iv = new ImageView(this);
  iv.setLayoutParams(layoutParams);
  //添加圆点的xml到Image布局中,注意这里添加的是未点击的xml圆点
  iv.setImageResource(R.drawable.point_normal);
  guidePage_point.addView(iv);//将图片导入到布局中
 }
 //在全部圆点添加完成后,给第一个显示的图片的圆点添加一个被选中的圆点xml
 guidePage_point.getChildAt(0).setBackgroundResource(R.drawable.point_select); 

 }
} 

运行效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android开发实现的ViewPager引导页功能(动态加载指示器)详解

    本文实例讲述了Android开发实现的ViewPager引导页功能(动态加载指示器).分享给大家供大家参考,具体如下: 先看效果图咯~ 现在几乎每个App都会有引导页,是不是感觉很炫很厉害,所以就想做出来一个学习一下~让自己的App看起来更加的美观~ 现在来分析一下: 这个引导页可以分为俩部分~ 1.小红点--来提醒这是第几页了~ 2."开始体验"这个Button--可以进入主界面,但是要控制这个Button只能在最后一页出现 布局的话使用相对布局~ 那现在来看看布局吧: activi

  • Android UI设计与开发之ViewPager介绍和简单实现引导界面

    做Android开发加起来差不多也有一年多的时间了,总是想写点自己在开发中的心得体会与大家一起交流分享.共同进步,刚开始写也不知该如何下手,仔细想了一下,既然是刚开始写,那就从一个软件给人最直观的感受--UI设计开始写起吧,循序渐进,娓娓道来.博主在这里和大家一起学习,希望能多多支持,话不多说,下面就开始讲解UI设计的第一篇. 在讲解如何实现引导界面的效果之前,我想先详细介绍一下ViewPager类的使用和说明,因为这是开发引导界面最重要的类,没有之一. 一.ViewPager实现的效果图 二.

  • Android利用ViewPager实现用户引导界面效果的方法

    本文实例讲述了Android利用ViewPager实现用户引导界面效果.分享给大家供大家参考,具体如下: 我相信有很多朋友在装完软件首次打开时,有很多软件都有一个软件功能介绍, 例如刚装完微信打开它,有很多介绍微信功能的图片,并且在屏幕下方有很多小圆点提示你当前图片的位置. 今天我就来实现这么个功能 所实现的功能: 1.可以左右滑动功能图片. 2.图片的索引 看出当前图片所在的位置. 3.可循环滑动. 4.图片的索引带有动画效果. 本次学习主要是利用ViewPager实现用户引导界面 在这里,我

  • Android UI设计与开发之使用ViewPager实现欢迎引导页面

    本系列文章都会以一个程序的实例开发为主线来进行讲解,以求达到一个循序渐进的学习效果,这样更能加深大家对于程序为什么要这样写的用意,理论加上实际的应用才能达到事半功倍的效果,不是吗? 最下方有源码的下载地址,几乎源码的每一行都有注释,写的通俗易懂,非常清晰,如有不懂的可以留言,本博主一定尽心尽力,为大家答题解惑,希望大家多多支持,好的,话不多说,让我们回归到今天的正题. 一.实现的效果图 也许是养成了这样一个习惯,每次看别人的代码前,必须要先看实现的效果图达到了一个什么样的效果,是不是跟自己想要实

  • Android开发实战之漂亮的ViewPager引导页

    目前很多软件安装时都会出现引导页面,用户体验很好. 下面就来DIY下: 因为视频上传很麻烦,所以截图了. 首先看看效果图: 点击小点可自由切换,滑动也可以自由切换,最后一个导航页添加了点击跳转. 开始实现引导页: 一.采集需要的图片放入drawable文件里 二.初始化每个导航页的视图 import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.suppo

  • Android控件ViewPager实现带有动画的引导页

    ViewPager实现带有动画的引导页,供大家参考,具体内容如下 好了,又到我们学习基础控件的时候了,其实引导页很简单,就是五张图片而已 一.ViewPager实现传统的引导页 传统的ViewPager实现引导页和ListView是一样道理的,只是把ListView的Item换成图片,把BaseAdapter换成PagerAdapter,我们先来看下传统引导页的效果图 步骤一:编写xml文件 既然用到的是ViewPager,那么xml文件就必须要有ViewPager,细心的你,可能会发现最后一页

  • Android启动引导页使用ViewPager实现

    我们在安装某个APP的时候,基本都会有一个引导页的提示,他们可以打广告,或者介绍新功能的加入和使用说明等. 一般都支持滑动并且下面有几个点,显示共有多少页和当前图片的位置,在IOS上这个实现起来比较简单,但在安卓上如何实现呢. 今天就和大家一起来学习用官方v4支持包下的ViewPager来实现这个效果. 先上图: 下面是我的实现,一个xml布局,一个GuideActivity和一个GuidePageAdapter.  先上XML. <?xml version="1.0" enco

  • Android UI设计与开发之ViewPager仿微信引导界面以及动画效果

    基于前两篇比较简单的实例做铺垫之后,这一篇我们来实现一个稍微复杂一点的引导界面的效果,当然也只是稍微复杂了一点,对于会的人来说当然还是so easy!正所谓会者不难,难者不会,大概说的就是这个意思了吧.好的,话不多说,回归正题. 这篇要实现的是一个仿微信的动画效果,虽然这种效果的实现在网上到处都有,但是我还是想站在中低端开发者的角度去告诉大家是如何实现的,当然实现的方式有很多,我也只是列出了我认为实现起来比较方便的一种方法,希望大家能够受用. 一.实现的效果图 有图才有真相,上图先: 点击按钮后

  • Android自定义引导玩转ViewPager的方法详解

    ViewPager简介: ViewPager(android.support.v4.view.ViewPager)是android扩展包v4包中的类,这个类可以让用户左右切换当前的view,实现滑动切换的效果. 注意: ViewPager类直接继承了ViewGroup类,也就是说它和我们经常打交道的LinearLayout一样,都是一个容器,需要在里面添加我们想要显示的内容. ViewPager类需要一个PagerAdapter适配器类给它提供数据,这个和ListView类似. ViewPage

  • android使用ViewPager组件实现app引导查看页面

    我们安装完app后第一次打开app,通常都会有一个翻页图片形式的app引导简介说明.下面我们来实现这个功能.ViewPager这个组件与ListView和RecyclerView在使用上有很高的相似处,所以你如果学习过以上两种列表滚动控件,可以基于它们帮助你理解ViewPager的使用. 实现步骤: 1.在左右滑动页面的界面中,通常在屏幕下方都会有一个小圆点,我们需要给这些小圆点的实现准备一些东西.在drawable目录下创建两个xml文件,一个画出未选中的圆点,一个画出选中后的圆点. 2.准备

  • Android中ViewPager组件的基本用法及实现图片切换的示例

    ViewPager是android-support-v4.jar包里的组件.在布局文件里标签需要连包名一起 写全称<android.support.v4.view.ViewPager /> 基本用法 ViewPager的基本用法我概括为三步 第一步 在主布局文件里放一个ViewPager组件 第二步 为每个页面建立布局文件,把界面写好 第三步 在主Activity里获取ViewPager组件,并为它设定Adapter. Adapter详细讲讲,ViewPager对应的Adapter继承自Pag

  • 实例讲解Android中ViewPager组件的一些进阶使用技巧

    我们经常看到使用了ViewPager的App,在每页上面都会有一个滑块来标志当前处于哪一页.在PagerView包里有android.support.v4.view.PagerTitleStrip和android.support.v4.view.PagerTabStrip两个组件,可以在布局文件中,作为ViewPager的子标签,并设定相对与ViewPager的位置(比如顶部).但这两个组件都很丑,并且标题会随着页面一起滑动,所以一般都不用. 其实实现一个滑块标志当前页面也很简单,大概需要两步:

  • Android使用ViewPager完成app引导页

    本文实例为大家分享了Android使用ViewPager完成app引导页的具体代码,供大家参考,具体内容如下 public class MainActivity extends AppCompatActivity { // int[] resourceId = { // R.layout.first, // R.layout.second, // R.layout.third // }; List<View> mListView; ViewPager viewPager; ViewGroup

  • Android实现过渡动画、引导页 Android判断是否第一次启动App

    目前的App在安装后,第一次打开,都会显示两秒左右的logo,然后进入引导页.如果关闭App,再重新打开,则只会显示logo,然后直接进入主页. 最近写了这个,记录一下. 首先是过渡动画,因为它不论App是否第一次启动都会显示. 这里我使用了Handler的postDelayed()方法.把过渡动画的Activity设为默认启动的Activity.在当前Activity中,执行postDelayed()方法,把延时的时长设为两秒即可. 过渡页面如下:transition_view.xml <?x

  • Android Fragment滑动组件ViewPager的实例详解

    Android Fragment滑动组件ViewPager的实例详解 1适配器FragmentPagerAdapter的实现 对于FragmentPagerAdapter的派生类,只需要重写getItem(int)和getCount()就可以了. public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<Fragment> list; public MyFragmentPagerAdapter

  • android自定义ViewPager水平滑动弹性效果

    android ViewPager是一个经常要用到的组件,但android系统本身为我们提供的ViewPager是没有任何效果的,只能是一页一页的滑动,这样会让人感觉很死板,在看一些知名大公司的App时,看到了他们的ViewPager在滑动到最开始或者最后的时候是有一个弹性效果的,使用起来感觉非常的好,于是乎就是百度搜了一下,在StackOverflow中看到一篇文章就是讲如何实现这个效果的. 先看下效果图:滑动到最后一页时仍然可以拉动-- 代码如下: package com.example.m

  • Android 利用ViewPager实现图片可以左右循环滑动效果附代码下载

    首先给大家展示靓照,对效果图感兴趣的朋友可以继续往下阅读哦. ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,上面是效果图,用美女图片是我一贯的作风,呵呵  1.    首先看一些layout下的xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=&qu

  • Android使用原生组件WebView加载网页和数据的方法

    在Api中关于这个类的介绍大致就是这是一个可以显示网页的视图,如: webView.loadUrl(http://www.baidu.com/); 显示结果: 还可以加载一些html的字符串,如: String str = "<html><body>You scored <b>192</b> points.</body></html>"; webView.loadData(str, "text/html&

随机推荐