在为游戏接入渠道SDK时,很多渠道都要求设置闪屏页来启动游戏。下面就通过配置AndroidManifest来启动闪屏页。
1、配置AndroidManifest的启动Activity
<!--配置游戏Activity即闪屏页跳转到的Activity--> <meta-data android:name="GAME_LAUNCH_ACTIVITY" android:value="com.dexlin.demo.GameActivity"/> <!--根据游戏实际情况修改screenOrientation属性 启动页--> <activity android:name="com.dexlin.demo.GameLaunchActivity" android:configChanges="screenSize|keyboardHidden|orientation" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:label="@string/app_name" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--填写游戏Activity--> <activity android:name="com.dexlin.demo.GameActivity" android:configChanges="screenSize|keyboardHidden|orientation" android:label="@string/app_name" android:screenOrientation="portrait"> </activity>
2、在assert文件夹下放一张图片: game_sdk_logo.png
3、设计闪屏页Activity
public class GameLaunchActivity extends Activity { private static final int PIC_SHOW_WIDTH_PADING = 40; private Bitmap mBitmap; private ImageView logoView; public GameLaunchActivity() { } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(!this.isTaskRoot() && this.getIntent().hasCategory("android.intent.category.LAUNCHER") && this.getIntent().getAction() != null && this.getIntent().getAction().equals("android.intent.action.MAIN")) {
this.finish(); } else { this.getWindow().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF"))); boolean hasFindPic = this.initView(); if(hasFindPic) { this.logoView.postDelayed(new Runnable() { public void run() { GameLaunchActivity.this.startGame(); } }, 3000L); } else { this.startGame(); } } } private void startGame() { try { ApplicationInfo e = this.getPackageManager().getApplicationInfo(this.getPackageName(), 128); String gameLaunchActivity = e.metaData.getString("GAME_LAUNCH_ACTIVITY"); Intent intent = new Intent(); intent.setClassName(this, gameLaunchActivity); this.startActivity(intent); } catch (Exception var4) { Toast.makeText(this, "启动游戏失败,检查游戏启动类配置", 1).show(); } this.finish(); } protected void onDestroy() { super.onDestroy(); if(this.mBitmap != null) { this.mBitmap.recycle(); this.mBitmap = null; } } private boolean initView() { this.mBitmap = this.getFitBitmap(); if(this.mBitmap != null) { this.logoView = new ImageView(this); this.logoView.setScaleType(ScaleType.FIT_XY); this.logoView.setImageBitmap(this.mBitmap); LayoutParams params = new LayoutParams(-2, -2); params.gravity = 17; FrameLayout main = new FrameLayout(this); main.addView(this.logoView, params); this.setContentView(main); } return this.mBitmap != null; } public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(this.mBitmap != null) { Bitmap bitmap = this.mBitmap; bitmap.recycle(); } this.mBitmap = this.getFitBitmap(); if(this.mBitmap != null && this.logoView != null) { this.logoView.setImageBitmap(this.mBitmap); } } private Bitmap getFitBitmap() { Bitmap mBitmap = this.getBitmap("game_sdk_logo.png"); if(mBitmap != null) { mBitmap = this.getScaleBitmap(mBitmap, (double)this.getScale(mBitmap)); } return mBitmap; } private float getScale(Bitmap mBitmap) { float scale = 1.0F; int height = getScreenHeight(this); int screenW = getScreenWidth(this); Configuration config = this.getResources().getConfiguration(); int orientation = config.orientation; int bitmapH = mBitmap.getHeight(); int width = mBitmap.getWidth(); float scaleSize; if(orientation == 2) { scaleSize = (float)((double)height * 0.33D); scale = scaleSize / (float)bitmapH; int scaleW = (int)(scale * (float)width); if(scaleW > screenW - 40) { scale = (float)(screenW - 40) / (float)width; } } else { scaleSize = (float)((double)screenW * 0.57D); scale = scaleSize / (float)width; } return scale; } public static int getScreenWidth(Activity context) { return context.getWindowManager().getDefaultDisplay().getWidth(); } public static int getScreenHeight(Activity context) { return context.getWindowManager().getDefaultDisplay().getHeight(); } public Bitmap getScaleBitmap(Bitmap bitmap, double scale) { return scale == 1.0D?bitmap:this.getScaleBitmap(bitmap, (double)bitmap.getWidth() * scale, (double)bitmap.getHeight() * scale); } public Bitmap getScaleBitmap(Bitmap bitmap, double newWidth, double newHeight) { if(null == bitmap) { return null; } else { int width = bitmap.getWidth(); int height = bitmap.getHeight(); double scaleWidth = newWidth / (double)width; double scaleHeight = newHeight / (double)height; double scale = Math.min(scaleWidth, scaleHeight); Matrix matrix = new Matrix(); matrix.postScale((float)scale, (float)scale); Bitmap result = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); if(bitmap != null && !bitmap.isRecycled()) { bitmap.recycle(); } return result; } } private Bitmap getBitmap(String srcFileName) { AssetManager assetManager = this.getAssets(); InputStream is = null; Bitmap bitmap = null; try { is = assetManager.open(srcFileName); bitmap = BitmapFactory.decodeStream(is); } catch (Exception var14) { ; } finally { if(is != null) { try { is.close(); } catch (IOException var13) { ; } } } return bitmap; } }