扣丁学堂Android培训

扣丁学堂Android开发技巧之启动屏和新功能左右导航逻辑代码详

2018-02-01  本文已影响4人  994d14631d16

  今天扣丁学堂小编给大家介绍一下关于Android技巧之启动屏+新功能左右导航逻辑详解,目前相信大家都见过app的一个最常见的特性,就是新功能属性介绍和启动屏,一般会怎么实现呢,这不就打算告诉大家了么。

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

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

  看看效果

  splashactivity.java

  [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;

  /**

  * @desc 启动屏

  * created by devilwwj on 16/1/23.

  */

  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;

  /**

  * 欢迎页

  *

  * @author wwj_748

  *

  */

  public class welcomeguideactivity extends activity implements

onclicklistener {

  private viewpager vp;

  private guideviewpageradapter adapter;

  private list 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();

  // 初始化引导页视图列表

  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培训官网、微信公众号平台,扣丁学堂Android视频教程从零基础到精通免费试听试学,就业终端服务系统随时监控学员的学习情况和效果,顺利毕业后根据学员自身风格和学习效果推荐就业。如果你想要学习Android开发工程师技术就不要再犹豫了,喜欢就付诸行动吧。

上一篇 下一篇

猜你喜欢

热点阅读