我需要爲我的應用程序啓動一個屏幕。 嘗試創建一個具有我的閃屏圖像的活動;並嘗試使用for循環和Timer類來引入時間延遲。但它不會那樣工作。 我做錯了嗎?如果是的話,什麼是正確的方法?在Android應用程序中擁有啓動畫面的最佳方式?
回答
上述解決方案很好,但如果用戶在飛濺延遲結束之前按下後退鍵(並關閉了您的應用程序)會怎麼樣。 該應用程序可能仍會打開下一個活動,這不是真正用戶友好的。
這就是爲什麼我使用自定義處理程序,並刪除onDestroy()中的任何掛起的消息。
public class SplashActivity extends Activity
{
private final static int MSG_CONTINUE = 1234;
private final static long DELAY = 2000;
@Override
protected void onCreate(Bundle args)
{
super.onCreate(args);
setContentView(R.layout.activity_splash);
mHandler.sendEmptyMessageDelayed(MSG_CONTINUE, DELAY);
}
@Override
protected void onDestroy()
{
mHandler.removeMessages(MSG_CONTINUE);
super.onDestroy();
}
private void _continue()
{
startActivity(new Intent(this, SomeOtherActivity.class));
finish();
}
private final Handler mHandler = new Handler()
{
public void handleMessage(android.os.Message msg)
{
switch(msg.what){
case MSG_CONTINUE:
_continue();
break;
}
}
};
}
我認爲onPause是removeMessages()調用的更好選擇。我發現onDestroy在生命週期中被調用得太晚,並且後面的Activity在點擊後出現。 +1雖然:-) – barry
您可以延遲嗎?
Thread delay = new Thread() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
runOnUiThread(new Runnable() {
@Override
public void run() {
startNextActivity();
}
});
}
};
試試這個
public class SplashActivity extends Activity {
Handler handler;
private long timeDelay = 2000; //2 seconds
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.SplashLayout);
final Intent i = new Intent(this, Landing.class);
handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
startActivity(i);
finish();
}
}, timeDelay);
}
}
試試這個,
protected int _splashTime = 15000;
private Handler handler;
private Runnable runnable;
private Context context;
@Override
public void onCreate(Bundle savedInstance)
{
super.onCreate(savedInstance);
setContentView(R.layout.splash);
final SplashScreen sPlashScreen = this;
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
try {
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, _splashTime);
}
finally {
finish();
//start a new activity
//mtdCheckLicense();
Intent main = new Intent();
main.setClass(sPlashScreen, YourMainActivity.class);
startActivity(main);
handler.removeCallbacks(runnable);
}
}
};
handler.postDelayed(runnable, 2000);
}
它會濺了一段時間,推出的主要活動。在這段代碼中,啓動屏幕等待2秒,然後啓動主要活動。
我爲我的每一個項目做的最簡單方法是如下:
public class SplashActivity extends Activity {
protected boolean active = true;
protected int splashTime = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
Thread splashTread = new Thread() {
@Override
public void run() {
try {
int waited = 0;
while(active && (waited < splashTime)) {
sleep(100);
if(active) {
waited += 100;
}
}
} catch(InterruptedException e) {
// do nothing
} finally {
finish();
// Start your Activity here
}
}
};
splashTread.start();
}
//...
對於此處描述你在浪費時間,因爲他們暫停初始化2-3seconds他們繼續之前的解決方案。
我更喜歡在我的main_activity.xml
之上添加Splash Screen Layout
。我通過擴展應用程序來檢測應用程序的第一次啓動。如果it's第一個開始,我告訴我的啓動畫面,而UI是建立在後臺...(使用後臺線程,如果進度落後!)你MainActivity
//Extend Application to save the value. You could also use getter/setter for this instead of Shared Preferences...
public class YourApplication extends Application {
public static final String YOUR_APP_STARTUP = "APP_FIRST_START";
@Override
public void onCreate() {
super.onCreate();
//set SharedPreference value to true
SharedPreferences mPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = mPreferences.edit();
editor.putBoolean(YOUR_APP_STARTUP, true);
editor.apply();
...
}
檢查你的第一次啓動
public class YourMainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//hide actionbar and other menu which could overlay the splash screen
getActionBar().hide();
setContentView(R.layout.activity_main);
Boolean firstStart = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(TVApplication.YOUR_APP_STARTUP, true);
if (firstStart) {
//First app start, show splash screen an hide it after 5000ms
final RelativeLayout mSplashScreen = (RelativeLayout) findViewById(R.id.splash_screen);
mSplashScreen.setVisibility(View.VISIBLE);
mSplashScreen.setAlpha(1.0f);
final FrameLayout mFrame = (FrameLayout) findViewById(R.id.frame_container);
mFrame.setAlpha(0.0f);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Animation fadeOutAnimation = AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.fade_out_animation);
fadeOutAnimation.setDuration(500);
fadeOutAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
mFrame.setAlpha(1.0f);
getActionBar().show();
}
@Override
public void onAnimationEnd(Animation animation) {
mSplashScreen.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mSplashScreen.startAnimation(fadeOutAnimation);
}
}, 5000); //<-- time of Splash Screen shown
} else {
((RelativeLayout) findViewById(R.id.splash_screen)).setVisibility(View.GONE);
getActionBar().show();
}
將SplashScreen插入main.xml中的頂部。我更喜歡RelativeLayout
。在這個例子中,SplashScreen被放置在Navitgation Drawer
的佈局中,我們真的很喜歡,不是嗎?
//main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer list -->
<ListView
android:id="@+id/slider_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_gravity="start"
android:background="@color/tvtv_background"
android:choiceMode="singleChoice"
android:divider="@drawable/nav_bar_divider"
android:dividerHeight="1dp"
android:listSelector="@android:color/transparent" />
</android.support.v4.widget.DrawerLayout>
<RelativeLayout
android:id="@+id/splash_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:background="@color/tvtv_white"
android:visibility="visible" >
<ImageView
android:id="@+id/splash_screen_logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:paddingLeft="50dp"
android:paddingRight="50dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/splash_screen_text"
style="@style/TVTextBlueContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/splash_screen_logo"
android:layout_centerHorizontal="true"
android:padding="10dp"
android:text="Awesome splash shiat" />
<ProgressBar
android:id="@+id/splash_screen_loader"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/splash_screen_text"
android:layout_centerHorizontal="true"
android:clickable="false"
android:indeterminate="true" />
</RelativeLayout>
</RelativeLayout>
這意味着即使您沒有使用它,您的閃屏始終會處於您的視圖層次結構中。如果你想使用這種方法,最好使用'ViewStub'。 http://developer.android.com/reference/android/view/ViewStub.html – Jelle
- 1. 在啓動時啓動應用程序的最佳方式?
- 2. 擁有tomcat應用程序的最佳方式/
- 3. 爲Java應用程序創建啓動畫面的最佳方法?
- 4. 在Android應用程序中使用啓動畫面的啓動順序
- 5. 等待應用程序啓動的最佳方式
- 6. 啓動WPF「.application」應用程序的最佳方式
- 7. 擁有應用程序範圍數組的最佳方法?
- 8. MVVM,動畫和命令 - 啓動動畫的最佳方式?
- 9. 在Android應用程序中植入Facebook的最佳方式
- 10. 在Android應用程序中實現設計的最佳方式?
- 11. 每次啓動Android應用程序時顯示啓動畫面
- 12. 在一個應用程序中擁有多個用戶的最佳方法
- 13. 在Flex中使用動畫製作動畫的最佳方式
- 14. 應用程序的最佳方式
- 15. 在Android TabHost應用程序中完成活動間通信的最佳方式
- 16. 從bash腳本啓動應用程序的最佳方法?
- 17. 爲桌面應用程序使用javascript api的最佳方式
- 18. 聊天應用程序 - 最佳方式
- 19. 在Windows啓動程序中放置程序的最佳方式是什麼?
- 20. 從Android應用程序調用Web服務的最佳方式
- 21. 只有存在外部應用程序的最佳方式
- 22. Rails:用多個模型啓動應用程序的最佳方式
- 23. 如何在Android應用程序中禁用啓動畫面自動旋轉?
- 24. 有沒有編程式重新啓動Android應用程序的方式
- 25. 從桌面應用程序存儲數據的最佳方式?
- 26. 在Cocoa應用程序中使用XML-RPC的最佳方式?
- 27. 在iPad應用程序中創建動畫文本的最佳方法?
- 28. 開發android應用程序的最佳方式?
- 29. 管理Android應用程序主題的最佳方式
- 30. 如何在Android中的應用程序在後臺顯示啓動畫面?
具體什麼也沒有關於定時器工作?這種方法應該可行。你能粘貼你的代碼嗎? –
可能的重複http://stackoverflow.com/questions/8642730/splash-screen-in-android-application –
如果它與另一個問題不同,你應該發佈你的答案,或者如果它是相同的,刪除帖子。 – Sababado