Android从零开始的开源项目-口袋代码-1.启动界面
android,开源项目,启动界面2016-06-01
App
在启动的时候或多或少都会有一个黑屏或者白屏的过程,即使Activity
的生命周期方法内什么都不做也会有,用户体验很差,所以要首先给Activity
设置一个主题,设置windowBackground
资源,并在onCreate
内切换回原本的主题.这样一来启动的时候就会显示设置的主题,当走到onCreate的时候又变回原先的主题,这样就达到了去除黑屏或者白屏的目的.<?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>
ImageView
,分别用于显示icon
与logo
图片,icon
居中放置,logo
位于底部并设置一个偏移量
Activity
中设置动画:icon
与logo
的动画资源文件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
:APPID
是Bmob
控制台自己新建的应用的专属ID
Bmob
的基本使用其开发文档内有详细的说明,本身使用起来也非常简单,直接给个Bmob
的地址:Bmob后端云private void initSdk() {
Bmob.initialize(this, BrioalConstan.APPID); //第二个参数传入APPID
}
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);
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群,欢迎加入.