Android启动屏实现左右滑动切换查看功能
作者:IT_xiao小巫 时间:2022-11-02 02:18:02
本文介绍一个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,启动屏,左右滑动
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