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

作者:IT_xiao小巫 时间:2022-11-02 02:18:02 

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

先说逻辑

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

  • 如果不是,则显示启动屏,2秒之后进入首页。
     

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

看看效果

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

上代码

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,启动屏,左右滑动
0
投稿

猜你喜欢

  • 解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题

    2023-07-03 11:08:04
  • 关于Eureka的概念作用以及用法详解

    2023-08-23 15:17:29
  • Flutter实现顶部导航栏功能

    2023-03-10 17:13:48
  • Grow heap (frag case) 堆内存过大的深入解析

    2023-04-28 15:30:27
  • Android使用PhotoView实现图片双击放大单击退出效果

    2022-10-10 04:52:11
  • JavaWeb核心技术中Session与Cookie浅析

    2023-06-07 20:43:17
  • Java微信公众平台开发(15) 微信JSSDK的使用

    2023-06-16 19:58:39
  • Android Studio使用小技巧:布局预览时填充数据

    2021-06-04 09:00:03
  • 使用android-apktool来逆向(反编译)APK包方法介绍

    2022-03-19 14:15:51
  • java多线程编程之InheritableThreadLocal

    2022-02-08 21:40:32
  • idea 多模块项目依赖父工程class找不到问题的方法

    2022-06-08 10:47:41
  • Java语法基础之循环结构语句详解

    2023-09-06 21:37:28
  • Android实现计时与倒计时的常用方法小结

    2023-10-28 07:18:02
  • Java NIO实例UDP发送接收数据代码分享

    2022-12-03 01:30:37
  • Spring Security如何为用户示例添加角色详解

    2023-09-13 02:31:58
  • C#使用log4net记录日志

    2022-12-04 03:08:35
  • Mybatis-plus配置分页插件返回统一结果集

    2022-05-27 19:15:06
  • IDEA 2019.2.3破解激活教程(亲测有效)

    2023-02-21 22:16:23
  • android获取屏幕宽高与获取控件宽高(三种方法)

    2022-07-11 11:25:42
  • Java集合之Set接口及其实现类精解

    2022-01-23 17:27:44
  • asp之家 软件编程 m.aspxhome.com