Android从零开始的开源项目-口袋代码-1.启动界面

原创 2016年06月01日 18:39:06

Android从零开始的开源项目-口袋代码-1.启动界面

总目录: Android从零开始的开源项目-口袋代码

效果示例:

这里写图片描述

实现流程:

这里写图片描述

App在启动的时候或多或少都会有一个黑屏或者白屏的过程,即使Activity的生命周期方法内什么都不做也会有,用户体验很差,所以要首先给Activity设置一个主题,设置windowBackground资源,并在onCreate内切换回原本的主题.这样一来启动的时候就会显示设置的主题,当走到onCreate的时候又变回原先的主题,这样就达到了去除黑屏或者白屏的目的.

详细参考: Android启动优化,去除白屏或者黑屏

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_login"
    tools:context=".activity.LauncherActivity">

    <ImageView
        android:id="@+id/launcher_logo"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_icon" />

    <ImageView
        android:id="@+id/launcher_icon"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:src="@mipmap/ic_logo" />
</RelativeLayout>

给父布局设置background,背景是一个渐变的drawable,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:angle="90" //渐变的角度
        android:centerColor="#136656" //中间颜色
        android:endColor="#04BC7A" //结束颜色
        android:startColor="#1E5359" // 开始颜色
        android:type="linear" /> //渐变模式为线性
</shape>

自定义Drawable的效果如下:

这里写图片描述

布局内还包含两个ImageView,分别用于显示iconlogo图片,icon居中放置,logo位于底部并设置一个偏移量

放置的效果如下:

这里写图片描述

Activity中设置动画:

首先是iconlogo的动画资源文件

launcher_logo.xml (注释直接写在xml文件内部方便查看,复制的话记得删除)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale //缩放动画
        android:fromXScale="0.8" //x坐标的起始缩放值 
        android:fromYScale="0.8" // y坐标的起始缩放值
        android:pivotX="50%" // 缩放的中点x坐标为当前组件的中点
        android:pivotY="50%" // 缩放中点y坐标
        android:toXScale="1.0" // 终止的缩放x方向的比例
        android:toYScale="1.0" /> //终止的缩放y方向的比例
    <translate //位移动画
        android:fromYDelta="100%" // 起始的y坐标
        android:toYDelta="-100%" /> //终止的y坐标

</set>

关于位移动画用一张图来解释一下:

这里写图片描述

Activity中的操作:

设置主题:

style.xml内添加主题,设置窗口背景,则点击app图标时会立即加载这个资源文件,不会有白屏或者黑屏出现

<style name="AppTheme.LauncherTheme">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/bg_login</item>
    </style>

Manifest文件中设置主题:

<activity
            android:name=".activity.LauncherActivity"
            android:theme="@style/AppTheme.LauncherTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

onCreate内换回原本的主题:

原本的主题为AppTheme_NoActionBar

@Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme_NoActionBar);
        super.onCreate(savedInstanceState);
        ...
    }

设置窗口全屏:

private void initWindow() {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

初始化Bmob SDK :

其中的APPIDBmob控制台自己新建的应用的专属ID

关于Bmob的基本使用其开发文档内有详细的说明,本身使用起来也非常简单,直接给个Bmob的地址:Bmob后端云

private void initSdk() {
   Bmob.initialize(this, BrioalConstan.APPID); //第二个参数传入APPID
}

启动动画

设置动画监听,当动画结束的时候结束当前界面进入主界面,并设置切换动画,关于切换动画的详细叙述参考另一篇文章,资源文件也是用的那篇文章内的:

PendingTransition实现炫酷的Activity切换动画

 private void startAnimation() {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.launcher_logo);
        animation.setDuration(1500);
        animation.setFillAfter(true);
        animation.setInterpolator(new AccelerateDecelerateInterpolator());
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                startActivity(new Intent(LauncherActivity.this, MainActivity.class));
                LauncherActivity.this.finish();
                overridePendingTransition(R.anim.slide_in_down, R.anim.slide_out_top);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        mLogo.startAnimation(animation);
        mDesc.startAnimation(animation);

启动界面就完成了,贴一下Activity的完整代码:

package com.brioal.pocketcode.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

import com.brioal.pocketcode.util.BrioalUtil;
import com.brioal.pocketcode.MainActivity;
import com.brioal.pocketcode.R;
import com.brioal.pocketcode.util.BrioalConstan;

import butterknife.Bind;
import butterknife.ButterKnife;
import cn.bmob.v3.Bmob;


public class LauncherActivity extends AppCompatActivity {


    @Bind(R.id.launcher_logo)
    ImageView mLogo;
    @Bind(R.id.launcher_icon)
    ImageView mDesc;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme_NoActionBar);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_launcher);
        ButterKnife.bind(this);
        initWindow();
        initSdk();
        startAnimation();
    }

    private void initWindow() {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    private void startAnimation() {
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.launcher_logo);
        animation.setDuration(1500);
        animation.setFillAfter(true);
        animation.setInterpolator(new AccelerateDecelerateInterpolator());
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                startActivity(new Intent(LauncherActivity.this, MainActivity.class));
                LauncherActivity.this.finish();
                overridePendingTransition(R.anim.slide_in_down, R.anim.slide_out_top);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        mLogo.startAnimation(animation);
        mDesc.startAnimation(animation);
    }

    private void initSdk() {
        Bmob.initialize(this, BrioalConstan.APPID);
        BrioalUtil.init(this);
    }
}

有不足的地方欢迎指出,另外建了个新手交流Android开发的QQ群,欢迎加入.

群号:375276053

版权声明:本文为博主原创文章,未经博主允许不得转载。

如何实现Android应用的启动画面(闪屏)?

Android的启动画面通常用来显示用户的某种形式的进度,在应用程序加载完全之前。有些人使用应用程序的启动动画,只是为了在几秒钟内显示其程序应用和公司的LOGO。不幸的是,和IOS相比,在Androi...

android启动界面的两种方式

希望大家多多指教,共同学习

android studio for android learning (八)开机启动界面splashActivity

1.什么是Splash?(是否使用splash根据实际需求来,一般不用Splash)比较成熟一点的应用会在进入应用之前显示一个启动界面.这个启动界面或简单,或复杂,或简陋,或华丽,用意不同,风格也不同...

Android应用启动界面分析(Starting Window)

我们打开一个应用程序时,会出现一个启动界面,不同的手机,启动界面不一样,甚至有的手机还会出现一段时间的黑屏,出现时间的长短与启动启动的速度有关。启动画面是什么?       我们看到了启动的画面,那显...

为Android应用程序添加Splash启动画面

多数应用程序为了在启动时显示公司、产品或者开发者等相关信息,都会有一个Splash界面。在Splash界面等待的同时,也可以预加载数据、系统检测等操作。有两种方法可以实现”Splash启动画面“效果....

Android启动页面的正确打开方式

现在APP的启动页面(Splash Screen)好多都是等待3秒,好一点的还可以跳过,但是有的跳过也是假的按钮。当然像一些大厂的APP,像网易新闻等启动页面都是广告,人家要收广告费的。但是,对于一些...

Android系统的开机画面显示过程分析

好几个月都没有更新过博客了,从今天开始,老罗将尝试对Android系统的UI实现作一个系统的分析,也算是落实之前所作出的承诺。提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的...

Android中给App设置NoActionBar/FullScreen

因为现在博主在学习安卓,有的时候难免会有设置整个程序无标题和全屏的要求,在百度上搜索有好几个 解决办法,但是有的时候的那些办法好用,有的时候不好用。 现在找到一个办法,博主自己测试时屡试不爽的,特...
  • Gpwner
  • Gpwner
  • 2016年05月29日 19:48
  • 3127

Android UI开发第二十四篇——Action Bar

Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为acti...
  • xyz_lmn
  • xyz_lmn
  • 2012年10月31日 16:11
  • 198578

总结一下Android中主题(Theme)的正确玩法

本文为转载,原文出处:http://www.cnblogs.com/zhouyou96/p/5323138.html 总结一下Android中主题(Theme)的正确玩法 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android从零开始的开源项目-口袋代码-1.启动界面
举报原因:
原因补充:

(最多只允许输入30个字)