当前位置: 移动技术网 > 移动技术>移动开发>Android > Android启动屏实现左右滑动切换查看功能

Android启动屏实现左右滑动切换查看功能

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文介绍一个app最常见的特性,就是新功能属性介绍和启动屏,一般会怎么实现呢,这不就打算告诉大家了么。

先说逻辑

  • 先判断是否第一次启动app,如果是,则进入功能使用导航(最简单的做法就是,左右滑动切换查看,滑动到最后一页点击按钮进入首页)。
  • 如果不是,则显示启动屏,2秒之后进入首页。

逻辑是很简单,如果有广告怎么办?广告肯定是从服务器拿,但会缓存到本地,没网的时候可以显示,可以使用webview来显示广告,反正笔者是这样干,具体实现先不说。

看看效果

上代码

splashactivity.java

package com.devilwwj.featureguide;

import android.app.activity;
import android.content.intent;
import android.os.bundle;
import android.os.handler;

import com.devilwwj.featureguide.global.appconstants;
import com.devilwwj.featureguide.utils.sputils;

public class splashactivity extends activity {
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 // 判断是否是第一次开启应用
 boolean isfirstopen = sputils.getboolean(this, appconstants.first_open);
 // 如果是第一次启动,则先进入功能引导页
 if (!isfirstopen) {
  intent intent = new intent(this, welcomeguideactivity.class);
  startactivity(intent);
  finish();
  return;
 }

 // 如果不是第一次启动app,则正常显示启动屏
 setcontentview(r.layout.activity_splash);

 new handler().postdelayed(new runnable() {

  @override
  public void run() {
  enterhomeactivity();
  }
 }, 2000);
 }

 private void enterhomeactivity() {
 intent intent = new intent(this, mainactivity.class);
 startactivity(intent);
 finish();
 }
}

代码解析:使用sharedpreference来保存app启动状态,如果为true,则进入功能导航,否则延迟2秒之后进入主页面。

welcomeguideactivity.java

package com.devilwwj.featureguide;

import android.app.activity;
import android.content.intent;
import android.os.bundle;
import android.support.v4.view.viewpager;
import android.support.v4.view.viewpager.onpagechangelistener;
import android.view.layoutinflater;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.imageview;
import android.widget.linearlayout;

import com.devilwwj.featureguide.global.appconstants;
import com.devilwwj.featureguide.utils.sputils;

import java.util.arraylist;
import java.util.list;

public class welcomeguideactivity extends activity implements onclicklistener {

 private viewpager vp;
 private guideviewpageradapter adapter;
 private list<view> views;
 private button startbtn;

 // 引导页图片资源
 private static final int[] pics = { r.layout.guid_view1,
  r.layout.guid_view2, r.layout.guid_view3, r.layout.guid_view4 };

 // 底部小点图片
 private imageview[] dots;

 // 记录当前选中位置
 private int currentindex;

 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_guide);

 views = new arraylist<view>();

 // 初始化引导页视图列表
 for (int i = 0; i < pics.length; i++) {
  view view = layoutinflater.from(this).inflate(pics[i], null);

  if (i == pics.length - 1) {
  startbtn = (button) view.findviewbyid(r.id.btn_login);
  startbtn.settag("enter");
  startbtn.setonclicklistener(this);
  }

  views.add(view);

 }

 vp = (viewpager) findviewbyid(r.id.vp_guide);
 // 初始化adapter
 adapter = new guideviewpageradapter(views);
 vp.setadapter(adapter);
 vp.setonpagechangelistener(new pagechangelistener());

 initdots();

 }

 @override
 protected void onresume() {
 super.onresume();
 }

 @override
 protected void onpause() {
 super.onpause();
 // 如果切换到后台,就设置下次不进入功能引导页
 sputils.putboolean(welcomeguideactivity.this, appconstants.first_open, true);
 finish();
 }

 @override
 protected void onstop() {
 super.onstop();
 }

 @override
 protected void ondestroy() {
 super.ondestroy();
 }

 private void initdots() {
 linearlayout ll = (linearlayout) findviewbyid(r.id.ll);
 dots = new imageview[pics.length];

 // 循环取得小点图片
 for (int i = 0; i < pics.length; i++) {
  // 得到一个linearlayout下面的每一个子元素
  dots[i] = (imageview) ll.getchildat(i);
  dots[i].setenabled(false);// 都设为灰色
  dots[i].setonclicklistener(this);
  dots[i].settag(i);// 设置位置tag,方便取出与当前位置对应
 }

 currentindex = 0;
 dots[currentindex].setenabled(true); // 设置为白色,即选中状态

 }

 /**
 * 设置当前view
 * 
 * @param position
 */
 private void setcurview(int position) {
 if (position < 0 || position >= pics.length) {
  return;
 }
 vp.setcurrentitem(position);
 }

 /**
 * 设置当前指示点
 * 
 * @param position
 */
 private void setcurdot(int position) {
 if (position < 0 || position > pics.length || currentindex == position) {
  return;
 }
 dots[position].setenabled(true);
 dots[currentindex].setenabled(false);
 currentindex = position;
 }

 @override
 public void onclick(view v) {
 if (v.gettag().equals("enter")) {
  entermainactivity();
  return;
 }

 int position = (integer) v.gettag();
 setcurview(position);
 setcurdot(position);
 }


 private void entermainactivity() {
 intent intent = new intent(welcomeguideactivity.this,
  splashactivity.class);
 startactivity(intent);
 sputils.putboolean(welcomeguideactivity.this, appconstants.first_open, true);
 finish();
 }

 private class pagechangelistener implements onpagechangelistener {
 // 当滑动状态改变时调用
 @override
 public void onpagescrollstatechanged(int position) {
  // arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。

 }

 // 当前页面被滑动时调用
 @override
 public void onpagescrolled(int position, float arg1, int arg2) {
  // arg0 :当前页面,及你点击滑动的页面
  // arg1:当前页面偏移的百分比
  // arg2:当前页面偏移的像素位置

 }

 // 当新的页面被选中时调用
 @override
 public void onpageselected(int position) {
  // 设置底部小点选中状态
  setcurdot(position);
 }

 }
}

代码解析:左右滑动是使用viewpager来做的,切换4个不同的view,监听viewpager的页面切换事件来更改底部指示点的切换,滑动到最后一个页面,设置按钮的点击事件,点击进入首页。

以上就是本文的全部内容,希望对大家学习android软件编程有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网