編輯:關於Android編程
在Android平台下,下載一個應用後,首次打開映入眼簾的便是Splash Screen,暫且不說Android的設計原則提不提倡這種Splash Screen。先來看看一般使用Splash Screen的場景:
1,第一次安裝後,簡單APP的閃屏達到品牌營銷的目的,復雜點的APP用來提供新手指導;
2,版本更新,說明版本新特性;
有人對這種設計嗤之以鼻,有人趨之若鹜,孰好孰壞不在我們探討之列。
這種Splash Screen實現及其簡單,常用來顯示產品Logo或者版本號等簡單信息,我們只需要想辦法讓WelcomeActivity運行幾秒種後自動跳轉到應用主界面即可;
我們只需要用到一個簡單的方法:
//3s後,執行run方法啟動主界面Activity
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
//啟動主Activity後銷毀自身
finish();
}
}, 3000);
所謂復雜操作是因為往往這種應用在進入界面之前需要進行很多後台操作,通過Splash Screen讓用戶等待,一般涉及的操作有:
從網絡獲取數據並存儲到本地 下載圖片 獲取和解析JSON/XML等文件 發送數據到服務端 身份驗證 。。。。反正一般都是類似於網路下載這樣的些耗時操作,但又不得不在應用進入主界面前需要做的工作。根據應用的不同,所做的工作也不同,這裡就以遠程獲取一張圖片,我們在進入歡迎界面後,開始從遠程下載一張圖片,完成後我們便進入主界面,將解析後的數據顯示在主界面;
圖片地址:: 創建SplashScreen布局:res/layout/splash_screen.xml
布局效果
創建MainActivity布局:res/layout/activity_main.xml
,僅僅用來顯示從遠程獲取的圖片
4.完成SplashScreenActivity,我們使用AsyncTask來執行獲取和解析數據,通過Intent將數據傳遞給MainActivity,
public class SplashScreenActivity extends Activity {
private static final String url=http://www.jycoder.com/json/Image/1.jpg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
/*
* 簡單Splash Screen的實現
* */
/*
* 3s後,執行run方法啟動主界面Activity
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
//啟動主Activity後銷毀自身
finish();
}
}, 3000);
* */
//在後台執行任務,傳入url
new FetchDataTask().execute(url);
}
public class FetchDataTask extends AsyncTask{
//執行前調用
@Override
protected void onPreExecute() {
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();
}
}
}
5.完成MainActivity,這裡需要注意如何接受Intent傳遞的對象
public class MainActivity extends Activity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView= (ImageView) findViewById(R.id.image);
Intent intent=getIntent();
if(intent!=null){
//注意Intent傳遞對象的方式
Bitmap bitmap=intent.getParcelableExtra(Image);
imageView.setImageBitmap(bitmap);
}
}
}
6.記得在Manifest.xml中增添聯網權限,將SplashScreenActivity設為啟動Activity
我第一次用我存儲在遠程的一張圖片的時候出錯了,遇到了一個很有意思的問題:
後來發現這種錯誤是因為用Intent傳遞圖片時,大小不能超過40K,記住哦
完成後的效果:
以上的例子都非常簡單,但基本上Splash Screen的思路無非這幾種,希望能對你有所幫助。
記得關注下方微信公眾平台~~~O(∩_∩)O哈哈~
本文是想總結一些Android Studio的使用技巧,對於大多數習慣了使用eclipse的人來說,可能會需要一段時間,但是如果看過下面的一些介紹,你就能體會到Andr
上一次發過了一個介紹Studio的,這裡再發一個補充下。我們都知道,Android Studio的功能是非常強大的,也是很智能的。如果有人告訴你學Android開發要用命
先來看看要實現的效果圖在講解中,需要大家提前了解一些關於圖片繪制的原理的相關知識。關於實現的流程 1、自定義View&nb
說來說去都不如 畫圖示意 簡單易懂啊!!!真是的! 來吧~~先上張圖~~! (一)首先明確一下Android中的坐標系統:屏幕的左上角是坐標系統原點(0,0)原