Android项目实战(三):实现第一次进入软件的引导页

最近做的APP接近尾声了,就是些优化工作了,

我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图)

自己做了一下,结合之前学过的

慕课网_ViewPager切换动画(3.0版本以上有效果)

 

思路很简单,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 }
View Code

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java gettime_Java Util.getTime方法代码示例

import org.jrobin.core.Util; //导入方法依赖的package包/类private void initGraphPeriodAndSize(Range range, int width, int height, RrdGraphDef graphDef) {// ending timestamp is the (current) timestamp in seconds// starting timestamp will be adjusted for each…

LESS CSS 框架简介(转)

为什么80%的码农都做不了架构师&#xff1f;>>> 原文地址:http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/ 简介 CSS&#xff08;层叠样式表&#xff09;是一门历史悠久的标记性语言&#xff0c;同 HTML 一道&#xff0c;被广泛应用于万维网&#…

全选 删除 分页

前台&#xff1a; <% Page Language"C#"AutoEventWireup"true"CodeFile"benrenbao.aspx.cs"Inherits"benrenbao"%><% Register Assembly"AspNetPager"Namespace"Wuqi.Webdiyer"TagPrefix"webdiyer&…

计算机java考试_2017年计算机java考试试题

正确的道路是这样&#xff1a;吸取你的前辈所做的一切&#xff0c;然后再往前走。以下是小编为大家搜索整理的2017年计算机java考试试题&#xff0c;希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!1). 程序流程图中的菱形框表示的是( )。A.处理步骤B.逻辑处…

IP通信基础 实验三

PC端配置&#xff1a;配置ip地址 配置网关 交换机(左)配置&#xff1a;①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link-type access port access vlan 10 interface gi 1/0/2 port link-type access port access vlan 10 interface gi 1…

图像处理(三)

VC实现对不同信号波形相似程度的判别摘要&#xff1a;本文介绍了利用相关对信号波形进行相似程度的判别方法。通过该技术可以对采集到的多种类型的数据信号间的相似度进行判别。本算法由Microsoft Visual C 6.0实现。 一、 引言 在工程上我们经常要判断某设备产生的实际波形信号…

Servlet3.0学习总结(四)——使用注解标注监听器(Listener)

Servlet3.0提供WebListener注解将一个实现了特定监听器接口的类定义为监听器&#xff0c;这样我们在web应用中使用监听器时&#xff0c;也不再需要在web.xml文件中配置监听器的相关描述信息了。 下面我们来创建一个监听器&#xff0c;体验一下使用WebListener注解标注监听器&am…

java反射 获取方法_java反射之获取类的信息方法(推荐)

本文接上文“老生常谈反射之class类的使用(必看篇)”&#xff0c;以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"1、获取成员函数信息/*** 获取成员函数信息* param obj*/public static void printclassmethodmessage…

Leetcode 刷题笔记

1Two SumEasy2Add Two NumbersMedium3Longest Substring Without Repeating CharactersMedium5Longest Palindromic SubstringMedium141Linked List CycleEasy转载于:https://www.cnblogs.com/Poceer/p/10922646.html

云计算(Cloud Computing) 培训总结

云计算(Cloud Computing) 培训总结 近来&#xff0c;云计算&#xff08;Cloud Computing&#xff09;是一种新兴的商业模型&#xff0c;在网络中是一个热度很高的新名词&#xff0c;被炒得很火&#xff0c;自己对新技术的那种…

PHP ThinkPHP学习第一步(搭建及认识ThinkPHP入口文件)

ThinkPHP包下载网址&#xff1a;http://www.thinkphp.cn本人下载3.2版本中的完整版&#xff0c;解压如下取其中的ThinkPHP文件于开发网站的根目录&#xff0c;并建立入口文件index.php入口文件index.php详细内容如下&#xff1a;<?php/** 本文件为thinkPHP的入口文件&#…

java怎么复制别人的数据库_java-如何在不使用Apache DDLUtils的情况下使用JDBC将模式从一个数据库复制到另一个数据库?...

我在MySQL中有一个数据库,我想以编程方式在FileMaker Pro中创建所有相同的表和字段.我可以使用JDBC自己完成此操作,但我希望已经有了可以执行此操作的库.我研究了来自Apache的DDLUtils,但无法弄清楚如何构建它(它在构建系统中使用Maven,尝试构建时会出现致命错误).解决方法:我自…

iptables 基础

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如上图所示&#xff0c;如果内网主机访问外网而经过路由时&#xff0c;源 IP 会发生改变&#xff0c;这种变更行为就是 SNAT&#xff1b;反之&#xff0c;当外网的数据经过路由发往内网主机时&#xff0c;数据包…

jqgrid学习(1)

grid_id:表格id options&#xff1a;参数 参数描述默认值gridModel当为ture我们会使用colModel中的属性构造查询条件&#xff0c;所用到的参数&#xff1a;name, index, edittype, editoptions, search.还有一个参数&#xff1a;defval&#xff1a;查询条件的默认值&#xff1b…

Oracle11g远程连接配置 visual studio 2003

服务器端 配置&#xff1a;oracle11g R2 x64 1.设置监听 a.启动栏 -> 开始 -> 程序 -> Oracle-OraDb11g_home1 -> 配置和移植工具 -> Net Manager b.Oracle Net 配置 -> 本地 -> 监听程序 -> LISTENER &#xff0c;查看是否有本地地址在监听&#xff…

JAVA思维导图学习笔记_8张思维导图,55天学习笔记,帮你入门JavaSE

学完了Java中的基础语法&#xff0c;也就是JavaSE。对其做了一个详细的梳理&#xff0c;也便于以后回顾。其中有些知识点被自己遗漏了&#xff0c;比如正则表达式这些&#xff0c;只能以后找机会补上了。01前言对于计算机基础知识的了解、以及Java相关的软件安装。相关笔记02基…

Laravel笔记记录

1.获取当前控制器和action名称 request()->route()->getAction()转载于:https://www.cnblogs.com/fpcing/p/10935867.html

使用MemoryStream和FileStream

使用MemoryStream和FileStream编程访问文件是通过文件流对象进行的&#xff0c;当应用程序需要访问文件时&#xff0c;必须先创建一个文件流对象&#xff0c;此流对象和文件是一一对应关系。在.NET中&#xff0c;使用抽象基类System.IO.Stream代表流&#xff0c;它提供Read和Wr…

java servlet异步_厉害了,Servlet3的异步处理机制

Servlet3发布好几年了&#xff0c;又有多少人知道它的新特性呢&#xff1f;下面简单介绍下。主要增加了以下特性&#xff1a;1、异步处理支持2、可插性支持3、注解支持&#xff0c;零配置&#xff0c;可不用配置web.xml...异步处理是什么鬼&#xff1f;直接操起键盘干。WebServ…

WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列...

WordPress后台默认是不显示文章、分类等信息ID的&#xff0c;查看起来非常不方便,不知道Wp团队出于什么原因默认不显示这个但可以使用Simply Show IDs插件来实现 不使用插件,其他网友的实现&#xff1a; <?php /** *为WordPress后台的文章、分类等显示ID From wpdaxue.com …