我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

本文实例讲述了Android利用ViewPager实现用户引导界面效果。分享给大家供大家参考,具体如下:

我相信有很多朋友在装完软件首次打开时,有很多软件都有一个软件功能介绍,

例如刚装完微信打开它,有很多介绍微信功能的图片,并且在屏幕下方有很多小圆点提示你当前图片的位置。

今天我就来实现这么个功能

所实现的功能:

1.可以左右滑动功能图片。
2.图片的索引 看出当前图片所在的位置。
3.可循环滑动。
4.图片的索引带有动画效果。

本次学习主要是利用ViewPager实现用户引导界面

在这里,我们需要用到google提到的一个支持包——Android-support-v4.jar,这个包包含了一些非常有用的类,其中就是ViewPager类来实现页面之间的切换操作,可以去官网下载这个包 使用谷歌提供的支持库(Android)

关于android-support-v4.jar的详细信息,大家可以访问google官方网站:http://developer.android.com/sdk/compatibility-library.html

下面是我的实现

GuideActivity.Java



public class GuideActivity extends Activity {
  // 到达最后一张
  private static final int TO_THE_END = 0;
  // 离开最后一张
  private static final int LEAVE_FROM_END = 1;
  // 如果想直接应用到你的项目中,只需在这里添加删除图片id即可
  private int[] ids = { R.drawable.guide_1,
      R.drawable.guide_3, R.drawable.guide_5,
      R.drawable.guide_6,R.drawable.guide_7
       };
  private List<View> guides = new ArrayList<View>();
  private ViewPager pager;
  private ImageView start;     // 点击体验
  private ImageView curDot;
  private LinearLayout dotContain; // 存储点的容器
  private int offset;       // 位移量
  private int curPos = 0;     // 记录当前的位置
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);
    init();
  }
  private ImageView buildImageView(int id)
  {
    ImageView iv = new ImageView(this);
    iv.setImageResource(id);
    ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.FILL_PARENT,
        ViewGroup.LayoutParams.FILL_PARENT);
    iv.setLayoutParams(params);
    iv.setScaleType(ScaleType.FIT_XY);
    return iv;
  }
  // 功能介绍界面的初始化
  private void init()
  {
    this.getView();
    initDot();
    ImageView iv = null;
    guides.clear();
    for (int i = 0; i < ids.length; i++) {
      iv = buildImageView(ids[i]);
      guides.add(iv);
    }
    System.out.println("guild_size="+guides.size());
    // 当curDot的所在的树形层次将要被绘出时此方法被调用
    curDot.getViewTreeObserver().addOnPreDrawListener(
        new OnPreDrawListener() {
          public boolean onPreDraw() {
            // 获取ImageView的宽度也就是点图片的宽度
            offset = curDot.getWidth();
            return true;
          }
        });
    final GuidePagerAdapter adapter = new GuidePagerAdapter(guides);
    // ViewPager设置数据适配器,这个类似于使用ListView时用的adapter
    pager.setAdapter(adapter);
    pager.clearAnimation();
    // 为Viewpager添加事件监听器 OnPageChangeListener
    pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
      @Override
      public void onPageSelected(int position)
      {
        int pos = position % ids.length;
        moveCursorTo(pos);
        if (pos == ids.length-1) {// 到最后一张了
          handler.sendEmptyMessageDelayed(TO_THE_END, 500);
        } else if (curPos == ids.length - 1) {
          handler.sendEmptyMessageDelayed(LEAVE_FROM_END, 100);
        }
        curPos = pos;
        super.onPageSelected(position);
      }
    });
  }
  
  private void getView()
  {
    dotContain = (LinearLayout)this.findViewById(R.id.dot_contain);
    pager = (ViewPager) findViewById(R.id.contentPager);
    curDot = (ImageView) findViewById(R.id.cur_dot);
    start = (ImageView) findViewById(R.id.open);
    start.setOnClickListener(new OnClickListener()
    {
      public void onClick(View v)
      {
        // 点击体验
      }
    });
  }
  
  private boolean initDot()
  {
    if(ids.length > 0){
      ImageView dotView ;
      for(int i=0; i<ids.length; i++)
      {
        dotView = new ImageView(this);
        dotView.setImageResource(R.drawable.dot1_w);
        dotView.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,1.0f));
        dotContain.addView(dotView);
      }
      return true;
    }else{
      return false;
    }
  }
  
  private void moveCursorTo(int position) {
    AnimationSet animationSet = new AnimationSet(true);
    TranslateAnimation tAnim =
        new TranslateAnimation(offset*curPos, offset*position, 0, 0);
    animationSet.addAnimation(tAnim);
    animationSet.setDuration(300);
    animationSet.setFillAfter(true);
    curDot.startAnimation(animationSet);
  }
  Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      if (msg.what == TO_THE_END)
        start.setVisibility(View.VISIBLE);
      else if (msg.what == LEAVE_FROM_END)
        start.setVisibility(View.GONE);
    }
  };
  // ViewPager 适配器
  class GuidePagerAdapter extends PagerAdapter{
    private List<View> views;
    public GuidePagerAdapter(List<View> views){
      this.views=views;
    }
    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
      ((ViewPager) arg0).removeView(views.get(arg1 % views.size()));
    }
    @Override
    public void finishUpdate(View arg0) {
    }
    @Override
    public int getCount() {
      // 注意这里一定要返回一个稍微大点值,不然滑到顶就滑不动了
      return views.size()*20;
    }
    @Override
    public Object instantiateItem(View arg0, int arg1) {
      Log.e("tag", "instantiateItem = "+arg1);
      ((ViewPager) arg0).addView(views.get(arg1 % views.size()),0);
      return views.get(arg1 % views.size());
    }
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == (arg1);
    }
    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
    }
    @Override
    public Parcelable saveState() {
      return null;
    }
    @Override
    public void startUpdate(View arg0) {
    }
  }
}

下面是布局main.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <android.support.v4.view.ViewPager
    android:id="@+id/contentPager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:flipInterval="30"
    android:persistentDrawingCache="animation" />
  <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:layout_marginBottom="22.0dip">
    <LinearLayout
      android:id="@+id/dot_contain"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:orientation="horizontal" >
    </LinearLayout>
    <ImageView
      android:id="@+id/cur_dot"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:class="lazy" data-src="@drawable/dot2_w" />
  </FrameLayout>
  <ImageView
    android:id="@+id/open"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:clickable="true"
    android:class="lazy" data-src="@drawable/ic_open"
    android:visibility="gone" />
</RelativeLayout>

运行效果:

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:Android启动引导页使用ViewPager实现Android开发实战之漂亮的ViewPager引导页Android控件ViewPager实现带有动画的引导页Android开发实现的ViewPager引导页功能(动态加载指示器)详解Android UI设计与开发之使用ViewPager实现欢迎引导页面Android UI设计与开发之ViewPager仿微信引导界面以及动画效果Android UI设计与开发之ViewPager介绍和简单实现引导界面android使用ViewPager组件实现app引导查看页面Android自定义引导玩转ViewPager的方法详解


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

本文实例讲述了Android利用ViewPager实现用户引导界面效果。分享给大家供大家参考,具体如下: 我相信有很多朋友在装完软件首次打开时,有很多软件都有一个软件功能介绍, 例如刚装完微信打开它,有很多介绍微信功能的图片,并且在屏幕下方
2022-06-06

android 引导界面的实现方法

代码如下:顺序是: OneAcitivity -->MainActivity -> TwoActivity 然后第2次进去就是:OneActivity -> TwoActi
2022-06-06

Android使用ViewPager实现启动引导页效果的案例

这篇文章将为大家详细讲解有关Android使用ViewPager实现启动引导页效果的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下ViewPagerTwoActivity.javapack
2023-06-14

很赞的引导界面效果Android控件ImageSwitcher实现

本文实例为大家分享了Android控件ImageSwitcher实现引导界面的代码,供大家参考,具体内容如下 效果图:布局代码:
2022-06-06

Android应用中使用ViewPager实现类似QQ的界面切换效果

这几天在研究ViewPager,简单的写一下如何使用ViewPager实现类似于QQ的“最近联系人、好友、群组”的界面切换(不知道他们是不是用这个方法实现的)。 ViewPager已经在android-sdk中加入了,具体的位置在%andr
2022-06-06

Android 利用ViewPager+GridView实现首页导航栏布局分页效果

最近我尝试使用ViewPager+GridView实现的,看起来一切正常,废话不多说,具体代码如下:如图是效果图 首先分析下思路1.首先是怎么布局:整体是一个ViewPager将GridView作为一个View添加到ViewPager的a
2022-06-06

Android应用中利用ViewPager实现多页面滑动切换效果示例

1、添加android support包 因为上面的几个类都是在android support包中才提供,我们先添加包。 在Eclipse->Window->Android SDK Manager,选择列表中Extras->Android
2022-06-06

Android编程实现ViewPager多页面滑动切换及动画效果的方法

本文实例讲述了Android编程实现ViewPager多页面滑动切换及动画效果的方法。分享给大家供大家参考,具体如下: 一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,
2022-06-06

利用CSS实现折叠面板效果的技巧和方法

利用CSS实现折叠面板效果的技巧和方法在网页设计中,折叠面板是一种常见的交互设计元素,可以用来隐藏或展开内容。利用CSS可以轻松地实现折叠面板效果,本文将介绍一些实现折叠面板的技巧和方法,并附带具体的代码示例。一、折叠面板的基本原理折叠面板
2023-10-24

Android如何使用viewPager2实现UI界面翻页滚动的效果

小编给大家分享一下Android如何使用viewPager2实现UI界面翻页滚动的效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.先在build.gradl
2023-06-15

利用CSS实现元素的阴影效果的方法

利用CSS实现元素的阴影效果的方法,需要具体代码示例在网页设计中,为元素添加阴影效果能够使页面更加生动、立体。利用CSS,我们可以通过简单的代码实现各种不同的阴影效果。本文将为大家介绍几种常见的实现元素阴影效果的方法,并给出具体的代码示例。
利用CSS实现元素的阴影效果的方法
2023-11-21

利用CSS实现元素的投影效果的方法

利用CSS实现元素的投影效果的方法,需要具体代码示例在网页设计中,投影效果可以为页面元素增添立体感和层次感,使页面更加丰富和生动。CSS(层叠样式表)为实现投影效果提供了多种方法和属性。一、box-shadow属性box-shadow属性是
利用CSS实现元素的投影效果的方法
2023-11-21

Android实现QQ新用户注册界面遇到问题及解决方法

在上篇文章给大家介绍了Android实现QQ登录界面遇到问题及解决方法,本篇文章继续给大家介绍有关android qq界面知识。 先给大家展示下效果图:问题:1、下拉列表(因为还没看到这里...) 2、标题栏显示问题3、按钮的 Enable
2022-06-06

Android使用Recyclerview实现图片轮播效果的方法

这篇文章将为大家详细讲解有关Android使用Recyclerview实现图片轮播效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图:思路:1.准备m张图片1.使用Recyclerview实现
2023-05-30

利用CSS实现元素的边框阴影效果的方法

利用CSS实现元素的边框阴影效果的方法,需要具体代码示例近年来,网页设计越来越重视用户体验,目标是尽可能提供更真实、更有层次感的页面效果。元素阴影效果就是其中之一,它能够给页面增添一种立体的感觉,使得元素更加突出和吸引人。本文将介绍如何利用
利用CSS实现元素的边框阴影效果的方法
2023-11-21

利用CSS实现元素的模糊背景效果的方法

利用CSS实现元素的模糊背景效果的方法,需要具体代码示例随着Web设计的不断发展,如何让页面元素呈现出优雅、独特的效果成为了设计师们关注的焦点之一。其中一种常见的效果是模糊背景。通过将元素的背景进行模糊处理,可以增强界面的层次感和美观度。在
利用CSS实现元素的模糊背景效果的方法
2023-11-21

利用CSS实现图片悬浮效果的技巧和方法

在网页设计中,图片悬浮效果是一种常见且吸引眼球的设计方式。通过悬浮效果,可以让用户在鼠标悬浮在图片上时,出现一些动画效果、文字说明或者其他有趣的交互效果。本文将介绍一些利用CSS实现图片悬浮效果的技巧和方法,并提供具体的代码示例。放大效果通
2023-10-21

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录