Android项目实战(三):实现第一次进入软件的引导页
时间:2022-05-16
本文章向大家介绍Android项目实战(三):实现第一次进入软件的引导页,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近做的APP接近尾声了,就是些优化工作了,
我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图)
自己做了一下,结合之前学过的
思路很简单,APP的主界面还是作为主Activity,只要新添加一个类来判断是不是第一次打开APP
设主activity 名字为:MainActivity.java 判断是不是第一次打开APP且实现引导页面的类 LoginActivity ,另外还需要一个类 这是安卓开发_慕课网_ViewPager切换动画(3.0版本以上有效果)中用到的 ZoomOutPageTransformer.java
1.在主activity中,在一开始 先跳转到LoginActivity类中
1 protected void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3 requestWindowFeature(Window.FEATURE_NO_TITLE);
4 setContentView(R.layout.activity_main);
5 startActivity(new Intent(MainActivity.this, LoginActivity.class)); //跳转到LoginActivity类中
6 //初始化
7 init();
8 initEvent();
9 //默认显示第一个功能的界面(微信界面)
10 setSelect(0);
11 }
2.在LoginActivity类中判断是不是第一次打开,如果是,则显示ViewPager切换动画效果
如果不是,则执行finish();语句,直接结束这个Activity 自然的就回到了主Activity中了
LoginActivity代码
1 package com.example.qunxiong;
2
3 import java.io.OutputStream;
4 import java.util.ArrayList;
5 import java.util.List;
6
7
8
9 import android.app.Activity;
10 import android.content.Context;
11 import android.content.Intent;
12 import android.content.SharedPreferences;
13 import android.content.SharedPreferences.Editor;
14 import android.os.Bundle;
15 import android.support.v4.view.PagerAdapter;
16 import android.support.v4.view.ViewPager;
17 import android.view.View;
18 import android.view.ViewGroup;
19 import android.view.View.OnClickListener;
20 import android.widget.Button;
21 import android.widget.ImageView;
22 import android.widget.ImageView.ScaleType;
23
24 public class LoginActivity extends Activity {
25 private ViewPager mviewpager; //控件
26 private int[] mImgIds = new int[]{R.drawable.bg_rank_shenqi_0,R.drawable.bg_rank_shenqi_1,R.drawable.bg_rank_shenqi_10};//初始化图片
27 private List<ImageView> mImages = new ArrayList<ImageView>();
28 private Button jump;
29 private SharedPreferences preferences;
30 private Editor editor;
31 private OutputStream os;
32 @Override
33 protected void onCreate(Bundle savedInstanceState) {
34 super.onCreate(savedInstanceState);
35 setContentView(R.layout.login);
36 preferences = getSharedPreferences("phone", Context.MODE_PRIVATE);
37 jump = (Button) findViewById(R.id.jump);
38 jump.setOnClickListener(new OnClickListener() {
39 @Override
40 public void onClick(View v) {
41 // TODO Auto-generated method stub
42 finish();
43 }
44 });
45 //判断是不是首次登录,
46 if (preferences.getBoolean("firststart", true)) {
47 editor = preferences.edit();
48 //将登录标志位设置为false,下次登录时不在显示首次登录界面
49 editor.putBoolean("firststart", false);
50 editor.commit();
51 mviewpager = (ViewPager) findViewById(R.id.id_viewpager);
52 //为ViewPage切换添加动画效果(3.0以上版本才可以有效果)
53 mviewpager.setPageTransformer(true, new ZoomOutPageTransformer());
54
55 mviewpager.setAdapter(new PagerAdapter() {
56
57 @Override
58 public Object instantiateItem(View container, int position) {
59 ImageView imageview = new ImageView(LoginActivity.this);
60 imageview.setImageResource(mImgIds[position]);
61 imageview.setScaleType(ScaleType.CENTER_CROP); //设置图片不变形
62 ((ViewGroup) container).addView(imageview);
63 mImages.add(imageview);
64 return imageview;
65 };
66 @Override
67 public void destroyItem(View container, int position, Object object) {
68 // TODO Auto-generated method stub
69
70 ((ViewPager) container).removeView(mImages.get(position));
71 }
72 public boolean isViewFromObject(View view, Object object) {
73 // TODO Auto-generated method stub
74 return view == object;
75 }
76
77 @Override
78 public int getCount() { //返回图片个数
79 // TODO Auto-generated method stub
80 return mImgIds.length;
81 }
82 });
83 }
84 else
85 {
86 finish();
87 }
88
89 }
90 }
91
切换动画效果代码
ZoomOutPageTransformer.java
1 package com.example.qunxiong;
2
3 import android.annotation.SuppressLint;
4 import android.support.v4.view.ViewPager;
5 import android.view.View;
6
7 public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
8 private static final float MIN_SCALE = 0.85f;
9 private static final float MIN_ALPHA = 0.5f;
10
11 @SuppressLint("NewApi") public void transformPage(View view, float position) {
12 int pageWidth = view.getWidth();
13 int pageHeight = view.getHeight();
14
15 if (position < -1) { // [-Infinity,-1)
16 // This page is way off-screen to the left.
17 view.setAlpha(0);
18
19 } else if (position <= 1) { // [-1,1]
20 // Modify the default slide transition to shrink the page as well
21 float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
22 float vertMargin = pageHeight * (1 - scaleFactor) / 2;
23 float horzMargin = pageWidth * (1 - scaleFactor) / 2;
24 if (position < 0) {
25 view.setTranslationX(horzMargin - vertMargin / 2);
26 } else {
27 view.setTranslationX(-horzMargin + vertMargin / 2);
28 }
29
30 // Scale the page down (between MIN_SCALE and 1)
31 view.setScaleX(scaleFactor);
32 view.setScaleY(scaleFactor);
33
34 // Fade the page relative to its size.
35 view.setAlpha(MIN_ALPHA +
36 (scaleFactor - MIN_SCALE) /
37 (1 - MIN_SCALE) * (1 - MIN_ALPHA));
38
39 } else { // (1,+Infinity]
40 // This page is way off-screen to the right.
41 view.setAlpha(0);
42 }
43 }
44 }
- 通过shell脚本监控sql执行频率(r3笔记第50天)
- 和Null有关的函数(r3笔记第48天)
- 关于查询转换的一些简单分析(二) (r3笔记第68天)
- 跨网络拷贝文件的简单实践(r3笔记第67天)
- 关于enq: TX - allocate ITL entry的问题分析(r3笔记第66天)
- Tensorflow学习:使用Tensorflow搭建深层网络分类器
- 关于interval partitioning(r3笔记65天)
- Spark Tips4: Kafka的Consumer Group及其在Spark Streaming中的“异动”(更新)
- 关于数据库中的一些name(r3笔记第64天)
- 码农的瑞士军刀-脚本语言
- shell基础学习总结(一) (r3笔记第63天)
- 关于sysdba,sysoper,dba的区别(r3笔记第62天)
- 使用句柄实现特定场景的无备份恢复 (r3笔记第61天)
- 关于dual表的破坏性测试(r3笔记第60天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 《剑指offer》第十天:青蛙跳台阶
- Kettle构建Hadoop ETL实践(一):ETL与Kettle
- 初识ABP vNext(2):ABP启动模板
- 维度爆炸?Python实现数据压缩竟如此简单!
- 如何扩展单个Prometheus实现近万Kubernetes集群监控?
- 一文带你彻底厘清 Isito 中的证书工作机制
- 如何将第三方服务注册集成到 Istio ?
- 【Pod Terminating原因追踪系列】之 containerd 中被漏掉的 runc 错误信息
- 【Pod Terminating原因追踪系列之二】exec连接未关闭导致的事件阻塞
- CD+服务网格灰度发布实践,一文带你体验如何编排更灵活
- 花十分钟的时间武装你的代码库
- 对HTML-input的一些思考和理解
- 【投稿】刀哥:Rust学习笔记 1
- 【Rust日报】2020-08-13 关于群集(Bevy)引擎ECS框架中system的语法糖是怎么实现的
- 最新情报:所有的递归都可以改写成非递归?