Welcom页面,Splash页面,代表的意义相同都是“启动页面”,除了个别的企业app或者政府app的话,都会用到本章的知识,请努力掌握!
启动页 :引导页之后的一个跳转界面,且每次登陆app都会进行展示,不同于引导页,因为引导页仅展示一次!
最后有一个注意点,是解决进入启动页视图没加载出来,出现短暂空白页面的处理方式。
Effect :
涉及知识:
1.Android原生的CountDownTimer倒计时功能
2.Handler机制,可通过下面的第一个链接学习,是一个延迟功能
本章使用到的知识点链接:
Android进阶之路 - Splash、Welcome欢迎页面的初始使用(一)
http://blog.csdn.net/qq_20451879/article/details/54695435
Android进阶之路 - CountDownTimer倒计时的分秒实现
http://blog.csdn.net/qq_20451879/article/details/71111024
注意:
1.右上边的背景可使用UI切图,也可以shape自己画
2.如ImageView的图片显示不全,在ImageView中加入下面这行属性
android:scaleType="fitXY"
3.CountDownTimer在onDestroy()生命周期内的销毁,减少内存开销
如果有需求,可以通过以下链接下载此Demo
http://download.csdn.net/detail/qq_20451879/9918986
AndroidMainfest :
“设置GuideActivity为第一个启动的主Activity,同时注意注册MainActivity”
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yl.shape.shape">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name="com.yl.shape.guide.GuideActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity android:name="com.yl.shape.guide.MainActivity"/>
application>
manifest>
GuideActivity :
package com.yl.shape.guide;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import com.yl.shape.shape.R;
/**
* Created by YongLiu on 2017/8/2.
*/
public class GuideActivity extends AppCompatActivity {
private TextView mTimer;
private CountDownTimer countDownTimer;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
mTimer = (TextView) findViewById(R.id.tv_time);
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
// startActivity(new //Intent(GuideActivity.this,MainActivity.class));
// finish();
// }
// },3000);
mTimer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(GuideActivity.this,MainActivity.class));
finish();
}
});
countDownTimer = new CountDownTimer(4000, 1000){
@Override
public void onTick(long millisUntilFinished) {
mTimer.setText(millisUntilFinished/1000 + "秒");
mTimer.setTextColor(Color.WHITE);
}
@Override
public void onFinish() {
startActivity(new Intent(GuideActivity.this,MainActivity.class));
finish();
}
};
countDownTimer.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
countDownTimer.cancel();
}
}
GuideActivity Xml :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/background"
android:id="@+id/image"
android:scaleType="fitXY"
/>
<TextView
android:layout_width="25dp"
android:layout_height="25dp"
android:background="@drawable/back"
android:id="@+id/tv_time"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:text=""
android:gravity="center"
/>
RelativeLayout>
MainActivity :
package com.yl.shape.guide;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.yl.shape.shape.R;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
MainActivity Xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.yl.shape.shape.com.yl.shape.guide.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="Baby,GO GO GO !"
android:textColor="#e322e1"
/>
LinearLayout>
解决问题 :
首次进入启动页,没有直接显示UI ,而是进入短暂空白,之后再跳出我们的UI
解决方式:
<activity
android:name=".home.activity.GuideActivity"
android:theme="@style/AppTheme"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
intent-filter>
activity>
在此时问题已经解决了,主要原因在于Theme是在App启动之后加载,而Activity中的背景图是在Activity启动之后加载,所以之前在App启动之后会看到Theme的默认背景。
简单言之,App的Theme属性在App启动时就加载,而背景图是在所依赖的Activity启动时才绘制加载,App的启动当然优先于Activity了,问题解决!