《笑话大全》是本人的第一个完整项目APP,目前已在腾讯应用宝上线,有兴趣的朋友可以去下载下来研究研究,有什么意见和建议都可以告诉我。说是完整项目,距离真正的商业项目还是差了很远的,比如界面不美观,网络加载的BUG等都是一些问题,鉴于本人技术原因,暂时还不能改善这些小问题。不过这都不是这篇博客的重点,我要将这个项目的所有代码都写在博客上,便于回顾,也正好再完整的梳理一遍,加强记忆。
任何APP,尤其是国内的APP都会有一个东西,那就是启动页面,也有叫闪屏页的,都是一个意思。虽然Google并不建议做这个玩意儿出来,但大环境如此,我也不能幸免。首先看一下启动页面的截图吧!
很普通的一个启动界面,看完了截图,下面是他的布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/splash_layout"
android:background="@drawable/splash_back">
<ImageView
android:id="@+id/jokes_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_logo"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp" />
<TextView
android:layout_below="@id/jokes_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#395c9d"
android:layout_marginTop="15dp"
android:textSize="50sp"
android:text="笑话大全"
android:layout_centerHorizontal="true"
android:id="@+id/textView" />
</RelativeLayout>
布局文件中可以看到,我不是将整个图片作为RelativeLayout的背景传入,这会涉及到屏幕适配问题导致的变形压缩。所以我只是将纯色图片作为背景传入,中间"Jokes"字样的圆形图片和下面的文字单独进行设置,这样虽然还是会有屏幕适配问题,但最起码中间的内容不会再变形,也算是相对而言一种较为巧妙的处理方式。
布局文件过后就是JAVA文件了。
启动页过后,我还做了引导页面,所以当启动页结束后要进行判断,如果用户是第一次使用的话,就跳转到引导页,如果不是的话就直接进入应用。
接下来是JAVA代码:
public class SplashActivity extends Activity {
private static final String APP_ID="";
private static final String APP_SECRET="";
private RelativeLayout splashLayout;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
//初始化广告
AdManager.getInstance(this).
init(APP_ID, APP_SECRET,false);
//实例化布局
splashLayout=(RelativeLayout)findViewById(R.id.splash_layout);
initAnimation();//执行初始化动画方法。
}
//初始化动画效果。
private void initAnimation(){
Animation animation= AnimationUtils.loadAnimation(SplashActivity.this,R.anim.alpha_scale);
animation.setFillAfter(true);
//给布局添加动画效果,也就是给启动页添加动画效果
splashLayout.startAnimation(animation);
//给动画设置监听器,当动画展示完毕后就进行判断。
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
//利用SharedPreferencesUtils工具类的静态函数获取是否是第一进入APP,如果为true,就跳转到新手页面。反之跳转到主页面。
Boolean isFirstEnter= SharedPreferencesUtils.getBoolean(SplashActivity.this,"is_first_enter",true);
Intent intent;
if (isFirstEnter){
intent=new Intent(SplashActivity.this,GuideActivity.class);
}else {
intent=new Intent(SplashActivity.this,MainActivity.class);
}
startActivity(intent);
finish();//关闭当前页面
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
}
上面的代码非常简单,将布局文件实例化(用词不是很严谨,希望知道的同学能告诉我怎么表述最合适),给其添加动画效果,设置展示的特效,再设置监听器,在展示结束后的回调函数中进行判断,如果是第一次进入,就跳转到引导页,反之就跳到主页面。这里涉及到一个类,他是SharedPreferencesUtils,这是自定义的工具类,代码如下:
public class SharedPreferencesUtils {
public static Boolean getBoolean(Context context,String key,Boolean value){
SharedPreferences sharedPreferences=context.getSharedPreferences("config",Context.MODE_PRIVATE);
return sharedPreferences.getBoolean(key,value);
}
public static void setBoolean(Context context,String key,Boolean value){
SharedPreferences sharedPreferences=context.getSharedPreferences("config",Context.MODE_PRIVATE);
sharedPreferences.edit().putBoolean(key,value).commit();
}
}
当然还有动画效果的布局文件,这个更简单,就不贴出来了。
以上就是启动页的代码逻辑。