您的位置:首页 > 移动开发 > Android开发

Android 如何实现欢迎界面(Splash Screen)

2018-01-11 11:27 731 查看
启动界面  先记一下  

代码报错:SegmentFault

参考文章:http://blog.csdn.net/shaoduo/article/details/48351585  

安卓判断是否首次进入app,通过判断跳转欢迎引导界面和主界面
http://www.jb51.net/article/36190.htm
Android笔记之:App应用之启动界面SplashActivity的使用
http://blog.csdn.net/xueshanhaizi/article/details/51262528
 Android应用启动界面分析(Starting Window)
http://blog.csdn.net/qq_25047355/article/details/55260980
详解安卓从图表icon点击到APP启动界面加载流程
http://www.jb51.net/article/36190.htm
Android笔记之:App应用之启动界面SplashActivity的使用
https://www.cnblogs.com/xiongbo/archive/2011/05/17/splash.html
创建Android启动界面
https://www.jianshu.com/p/33a798ac3298  你所不知道的。。。

贴:

 MainActivity

public class MainActivity extends Activity {

private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView = findViewById(R.id.image);

Intent intent = getIntent();

if (intent!=null) {
//注意Intent传递对象的方式
Bitmap bitmap = intent.getParcelableExtra("Image");
imageView.setImageBitmap(bitmap);
}
}
}
ancivity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
tools:context="net.lm.fire_controller.MainActivity">

<ImageView
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

</LinearLayout>


SplashScreenActivity

package net.lm.fire_controller;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
* Created by Administrator on 2018/1/11.
*/

public class SplashScreenActivity extends Activity {

private static final String url = "http://img.pconline.com.cn/images/upload/upc/tx/wallpaper/1304/30/c0/20394669_1367251284721_320x480.jpg";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);

new FetchDataTask().execute(url);
}

public class FetchDataTask extends AsyncTask<String,Void,Bitmap> {

//执行前调用
protected  void onPreExecut(){
super.onPreExecute();
}

//执行后台任务
@Override
protected Bitmap doInBackground(String... strings) {
Bitmap bitmap = null;

try {
//通过传入的图片地址,获取图片
HttpURLConnection connection = (HttpURLConnection) (new URL(strings[0])).openConnection();
InputStream is = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}

//任务完成时调用

@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);

//讲获取的数据通过Intent传送给MainActivity
Intent intent = new Intent(SplashScreenActivity.this,MainActivity.class);
//注意,intent传递图片时,图片对象大小不应该超过40k
intent.putExtra("Image",result);
startActivity(intent);

//启动MainActivity后销毁自身
finish();
}
}
}


splash_screen.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">

<ImageView

android:id="@+id/appImage"
android:src="@mipmap/personal_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:gravity="center"
android:text="Welcome to MS_Movie"
android:layout_marginTop="15dp"
android:textSize="30sp"
android:textColor="#00ACED"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>


项目清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.lm.fire_controller" >

 <uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

</manifest>

这里附一张,老师给的提醒:

/**
* 包名:net.hw.driver_test.ui
* 类名:SplashScreenActivity
* 描述:启动界面
* 作者:华卫
* 日期:2017年1月4日
*/
package net.hw.driver_test.ui;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import net.hw.driver_test.R;

public class SplashScreenActivity extends Activity {
/**
* 图标标签
*/
private ImageView ivIcon;
/**
* 延迟时间
*/
private static final int DELAY_TIME = 4000;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_splash_screen);

// 通过资源标识获得控件实例
ivIcon = (ImageView) findViewById(R.id.iv_icon);

// 加载动画配置文件,启动动画
ivIcon.startAnimation(AnimationUtils.loadAnimation(this, R.anim.animator));

// 利用消息处理器实现延迟跳转到登录窗口
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// 启动登录窗口
startActivity(new Intent(SplashScreenActivity.this, LoginActivity.class));
// 关闭启动画面
finish();
}
}, DELAY_TIME);
}
}

后续(过了一个下午):

查看了一些资料,如果按照原本计划,应该是一个启动页面后再弹出登录注册框。。 为了多方面的考虑,想了一下,如果今后有类似的app做引导页,其实也是可以采用  三张图片滚动的形式,再跳转主界面,这样也是可以的。

一张启动页面用Splash Screen可以做出来,控制持续的时间 再跳转可以的。

我找到了简书上用RxJava做的引导页,尝试了一下,感觉用户体验应该相对来说也是可以,只是再加长了进入主界面的时间,多了缓冲和视觉上的效果。



这是现在做的一个实训项目,但是目前来说写这篇文章意义不大,只是一个拓展吧。以作今后开发之需。

RxJava实践之打造酷炫启动页

两步打造华丽丽的Android引导页(用到RxJava)

Android启动页优化,去黑屏实现秒启动

这是代码地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: