Android启动页面SplashActivity的实现

最近我旁边的兄弟同时是我的前辈、导师给我提了一个简单需求,说实现App的闪屏页面,让其全屏显示一张图片,我当时还没明白“闪屏”是什么功能,后来联想到打开游戏的时候横竖屏切换的场景,然后感觉好像很难,于是去百度一下,WTF,闪屏就是SplashActivity!不就是一个广告页么,这也太TM简单了,然后我就说,30分钟之内让你看到效果,你先去睡一会,事实证明我还是Too Young。因为某些原因项目的layout目录下不能放xml文件,不管是手动新建的,还是通过Activity新建的都会报错,当然我后面想了一下,可能是因为使用cocos的原因res目录被锁定了,所以我只好转变策略在代码中实现视图逻辑了,虽然这显然违背了Android数据和视图分离的原则,代码如下

@Override
	protected void onCreate(Bundle savedInstanceState) {


		super.onCreate(savedInstanceState);


		if (VERSION.SDK_INT > 11 && VERSION.SDK_INT < 19) { // lower api
			View v = getWindow().getDecorView();
			v.setSystemUiVisibility(View.GONE);
		} else if (Build.VERSION.SDK_INT >= 19) {
			// for new api versions.
			View decorView = getWindow().getDecorView();
			int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
					| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
					| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
					| View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
			decorView.setSystemUiVisibility(uiOptions);
		}


		// 初始化布局,设置相关参数
		LinearLayout layout = new LinearLayout(this);
		layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
		layout.setOrientation(LinearLayout.VERTICAL);
		layout.setGravity(Gravity.CENTER);


		// 初始化图片控件
		ImageView imView = new ImageView(this);
		imView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
		imView.setScaleType(ScaleType.CENTER_CROP);


		AssetManager assets = getResources().getAssets();
		// 文件路径是从assets文件夹下开始的,开头不要加/
		String fileName = "res/img1.jpg";


		try {
			InputStream is = assets.open(fileName);
			Bitmap bm = BitmapFactory.decodeStream(is);
			imView.setImageBitmap(bm);


		} catch (IOException e) {
			e.printStackTrace();
		}


		// 将控件加入布局
		layout.addView(imView);
		setContentView(layout);


		// 1000毫秒为1秒
		int time = 2000;


		new Handler().postDelayed(new Runnable() {


			@Override
			public void run() {
				startActivity(new Intent(SplashActivity.this, AppActivity.class));
				finish();
			}
		}, time);
	}
下面简单讲解一下,刚开始那一段是去掉标题栏和导航键的,代码生成其实和xml中定义的差不多,只不过没有那么直观,LayoutParam来设置width和height,我这里要全屏显示,所以都是Match_Parent,然后setScaleType是设置缩放模式,考虑到图片宽高比不同要全屏显示就必须缩放图片,handler用于延时操作。

你可能感兴趣的:(Java)