Jamendo学习笔记之三:欢迎页面的实现Plus

按:之前写了几篇Jamendo的学习笔记,最近准备全面的将Jamendo完整的分析学习一遍。我将参考GaoMatrix的相关博文:http://blog.csdn.net/gaomatrix/article/category/900092。

学习并补充。

整体的文章结构将按照app的界面功能先后展开。

本讲涉及的类:SplashActivity HomeActivity,定位至activity包找到即可。

(一) App第一个Activity的定位

显然,manifest文件中,搜索关键词”MAIN”即可定位。另外,也可参考log信息,搜索“Displayed”信息,第一个显示的即为入口Activity,本App显然为SplashActivity

manifest.xml定位如下:

  
  
  
  
  1. <activity android:name=".activity.SplashscreenActivity" > 
  2.             <intent-filter> 
  3.                 <action android:name="android.intent.action.MAIN" > 
  4.                 </action> 
  5.  
  6.                 <category android:name="android.intent.category.LAUNCHER" > 
  7.                 </category> 
  8.             </intent-filter> 
  9.         </activity> 

(二) Activity风格的代码设置:无标题

代码如下:

  
  
  
  
  1. requestWindowFeature(Window.FEATURE_NO_TITLE); 

(三) 动画的使用:新属性

AnimationUtils的使用:通过上下文(Context)和资源id加载动画

属性setFillAfter,如果设置为true,代表动画播放完毕停留在最后一帧的画面。

代码如下:

  
  
  
  
  1. endAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); 
  2.         endAnimation.setFillAfter(true);//动画播放完毕,停在最后一帧 

更多动画内容,参看我的动画博文:

(四) 监听

A, Dialog结束的监听

代码:

  
  
  
  
  1. final TutorialDialog dlg = new TutorialDialog(this); 
  2.             dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { 
  3.                 @Override 
  4.                 public void onDismiss(DialogInterface dialog) { 
  5.                     CheckBox cb = (CheckBox) dlg.findViewById(R.id.toggleFirstRun); 
  6.                     if (cb != null && cb.isChecked()) { 
  7.                         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SplashscreenActivity.this); 
  8.                         prefs.edit().putBoolean(FIRST_RUN_PREFERENCE, false).commit(); 
  9.                     } 
  10.  
  11.                      
  12.                     int activeCount = Thread.activeCount(); 
  13.                     Log.d("animation""activeCount before is:" + activeCount); 
  14.                     endAnimationHandler.removeCallbacks(endAnimationRunnable); 
  15.                     activeCount = Thread.activeCount(); 
  16.                     Log.d("animation""activeCount after is:" + activeCount); 
  17.                     endAnimationHandler.postDelayed(endAnimationRunnable, 2000); 
  18.                 } 
  19.             }); 
  20.             dlg.show(); 

B, Animation结束的监听

代码:

  
  
  
  
  1. endAnimation.setAnimationListener(new AnimationListener() { 
  2.             @Override 
  3.             public void onAnimationStart(Animation animation) { } 
  4.              
  5.             @Override 
  6.             public void onAnimationRepeat(Animation animation) { } 
  7.              
  8.             @Override 
  9.             public void onAnimationEnd(Animation animation) { 
  10.                 HomeActivity.launch(SplashscreenActivity.this); 
  11.                 SplashscreenActivity.this.finish(); 
  12.             } 
  13.         }); 

(五) 初始Activity的销毁

显然,以下代码完成SplashActivity的销毁和HomeActivity的启动,代码如下:

SplashActivity中:

  
  
  
  
  1. @Override 
  2.             public void onAnimationEnd(Animation animation) { 
  3.                 HomeActivity.launch(SplashscreenActivity.this); 
  4.                 SplashscreenActivity.this.finish(); 
  5.             } 

HomeActivity中:

  
  
  
  
  1. public static void launch(Context c){ 
  2.         Intent intent = new Intent(c, HomeActivity.class); 
  3.         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP ); 
  4.         c.startActivity(intent); 
  5.     } 

 

本应用使用到了Android的加载模式(launch mode),可参看前文安卓加载模式(Android LauncherMode)》:

http://mikewang.blog.51cto.com/3826268/708600

除了设置Intent的FLAG之外,也可以如Jamendo通过代码实现。

文档翻译地址:待完成

(六) 设置的保存

SharePreference将以键值对的形式存储我们的设置,文档中的示例代码如下:

  
  
  
  
  1. public class Calc extends Activity { 
  2.     public static final String PREFS_NAME = "MyPrefsFile"
  3.  
  4.     @Override 
  5.     protected void onCreate(Bundle state){ 
  6.        super.onCreate(state); 
  7.        . . . 
  8.  
  9.        // Restore preferences 
  10.        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
  11.        boolean silent = settings.getBoolean("silentMode"false); 
  12.        setSilent(silent); 
  13.     } 
  14.  
  15.     @Override 
  16.     protected void onStop(){ 
  17.        super.onStop(); 
  18.  
  19.       // We need an Editor object to make preference changes. 
  20.       // All objects are from android.context.Context 
  21.       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
  22.       SharedPreferences.Editor editor = settings.edit(); 
  23.       editor.putBoolean("silentMode", mSilentMode); 
  24.  
  25.       // Commit the edits! 
  26.       editor.commit(); 
  27.     } 

本身实现比较简单,可参考文档学习。

(七) 自定义Dialog

适用于显示指定内容的view,关于(About)页可使用。

定位到:TutorialDialog,核心代码:

  
  
  
  
  1. private final void initialize(final Context context) { 
  2.         setContentView(R.layout.tutorial); 
  3.         setTitle(R.string.tutorial_title); 
  4.          
  5.         Button mCloseButton = (Button)findViewById(R.id.closeTutorial); 
  6.         if (mCloseButton != null) { 
  7.             mCloseButton.setOnClickListener(new View.OnClickListener() { 
  8.                  
  9.                 @Override 
  10.                 public void onClick(View v) { 
  11.                     dismiss(); 
  12.                 } 
  13.             }); 
  14.         } 
  15.     } 

实际显示的应用提示如下图:

(八) 动画的显示

代码如下:

  
  
  
  
  1. endAnimationHandler.removeCallbacks(endAnimationRunnable); 
  2.             endAnimationHandler.postDelayed(endAnimationRunnable, 1500); 

疑问:不太明白,之前并未调用callback,为什么要首先Remove掉callback,再postDelay。

你可能感兴趣的:(animation,dialog,sharepreference,jamendo,splashview)