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 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货

Android项目实战(十六):QQ空间实现(一)—— 展示说说中的评论内容并有相应点击事件

6206
来自专栏james大数据架构

Android LayoutInflater详解

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/l...

2279
来自专栏非著名程序员

自定义带图片和文字的ImageTextButton

今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认...

2139
来自专栏向治洪

仿qq登录界面

最近做一个登录的界面,我脑子里一下就想到QQ的登录界面,简单,美观,所以就找了些资料实现了下,现在整理下 先来看下效果图 ? 1.首先是布局文件XML文...

8489
来自专栏Android知识点总结

4-AVI--Fragment与ViewPager结合

1093
来自专栏青蛙要fly的专栏

Android技能树 — PopupWindow小结

关于下拉选择框,估计大家都有很多选择,我在以前的文章:项目需求讨论-HyBrid模式需求改造 上写过下拉框选择这一块,正好用的Spinner。

1071
来自专栏GIS讲堂

用百度地图API打造方便自己使用的手机地图

有钱人咱就不说了,因为偶是个穷银……因为穷,所以去年买的Huawei C8650+到现在还在上岗,对于没有钱买好的配置的手机的童鞋来说,类似于百度,谷歌,高德等...

4804
来自专栏技术小黑屋

超简单实现Google+列表特效

相信用过Google+的人都感到其应用的特效相当棒,本文将以超简单的形式来实现类似Google+列表的特效。仅仅写几行代码就可以实现奥。

972
来自专栏水击三千

Android学习之sqlite与listview

在android系统中使用的是sqlite数据库,前面的简易登录系统已经讲述了数据库的应用。本例的重点是实现数据库与listview的绑定。demo的数据是将个...

3556
来自专栏学海无涯

Android开发之ViewPager简单使用

什么是ViewPager? ViewPager(android.support.v4.view.ViewPager)是android扩展包v4包中的类,这个类可...

3285

扫码关注云+社区

领取腾讯云代金券