Added SpashScreen support for android thanks to iwgeric
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9106 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
d6af43a5cb
commit
82b1e94953
@ -4,11 +4,18 @@ import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.NinePatchDrawable;
|
||||
import android.opengl.GLSurfaceView;
|
||||
import android.os.Bundle;
|
||||
import android.view.Display;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import com.jme3.input.android.AndroidInput;
|
||||
import com.jme3.input.controls.TouchListener;
|
||||
@ -85,6 +92,13 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
*/
|
||||
protected boolean screenShowTitle = true;
|
||||
|
||||
/**
|
||||
* Splash Screen picture Resource ID. If a Splash Screen is desired, set
|
||||
* splashPicID to the value of the Resource ID (i.e. R.drawable.picname).
|
||||
* If splashPicID = 0, then no splash screen will be displayed.
|
||||
*/
|
||||
protected int splashPicID = 0;
|
||||
|
||||
/**
|
||||
* Set the screen orientation, default is SENSOR
|
||||
* ActivityInfo.SCREEN_ORIENTATION_* constants
|
||||
@ -102,6 +116,8 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
protected OGLESContext ctx;
|
||||
protected GLSurfaceView view = null;
|
||||
protected boolean isGLThreadPaused = true;
|
||||
private ImageView splashImageView = null;
|
||||
private FrameLayout frameLayout = null;
|
||||
final private String ESCAPE_EVENT = "TouchEscape";
|
||||
|
||||
static {
|
||||
@ -167,7 +183,6 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
app.start();
|
||||
ctx = (OGLESContext) app.getContext();
|
||||
view = ctx.createView(input, eglConfigType, eglConfigVerboseLogging);
|
||||
setContentView(view);
|
||||
|
||||
// Set the screen reolution
|
||||
WindowManager wind = this.getWindowManager();
|
||||
@ -176,6 +191,9 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
|
||||
AppSettings s = ctx.getSettings();
|
||||
logger.log(Level.INFO, "Settings: Width {0} Height {1}", new Object[]{s.getWidth(), s.getHeight()});
|
||||
|
||||
layoutDisplay();
|
||||
|
||||
} catch (Exception ex) {
|
||||
handleError("Class " + appClass + " init failed", ex);
|
||||
setContentView(new TextView(this));
|
||||
@ -310,4 +328,57 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void layoutDisplay() {
|
||||
logger.log(Level.INFO, "Splash Screen Picture Resource ID: {0}", splashPicID);
|
||||
if (splashPicID != 0) {
|
||||
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
|
||||
LayoutParams.FILL_PARENT,
|
||||
LayoutParams.FILL_PARENT,
|
||||
Gravity.CENTER
|
||||
);
|
||||
|
||||
frameLayout = new FrameLayout(this);
|
||||
|
||||
splashImageView = new ImageView(this);
|
||||
|
||||
Drawable drawable = this.getResources().getDrawable(splashPicID);
|
||||
if (drawable instanceof NinePatchDrawable) {
|
||||
splashImageView.setBackgroundDrawable(drawable);
|
||||
} else {
|
||||
splashImageView.setImageResource(splashPicID);
|
||||
}
|
||||
|
||||
frameLayout.addView(view);
|
||||
frameLayout.addView(splashImageView, lp);
|
||||
|
||||
setContentView(frameLayout);
|
||||
logger.log(Level.INFO, "Splash Screen Created");
|
||||
} else {
|
||||
logger.log(Level.INFO, "Splash Screen Skipped.");
|
||||
setContentView(view);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void removeSplashScreen() {
|
||||
logger.log(Level.INFO, "Splash Screen Picture Resource ID: {0}", splashPicID);
|
||||
if (splashPicID != 0) {
|
||||
if (frameLayout != null) {
|
||||
if (splashImageView != null) {
|
||||
this.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
splashImageView.setVisibility(View.INVISIBLE);
|
||||
frameLayout.removeView(splashImageView);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
logger.log(Level.INFO, "splashImageView is null");
|
||||
}
|
||||
} else {
|
||||
logger.log(Level.INFO, "frameLayout is null");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -83,6 +83,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer
|
||||
protected boolean autoFlush = true;
|
||||
|
||||
protected AndroidInput view;
|
||||
private boolean firstDrawFrame = true;
|
||||
|
||||
private long milliStart;
|
||||
private long milliDelta;
|
||||
@ -411,6 +412,16 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer
|
||||
|
||||
listener.update();
|
||||
|
||||
// call to AndroidHarness to remove the splash screen, if present.
|
||||
// call after listener.update() to make sure no gap between
|
||||
// splash screen going away and app display being shown.
|
||||
if (firstDrawFrame) {
|
||||
final Context ctx = this.view.getContext();
|
||||
if (ctx instanceof AndroidHarness) {
|
||||
((AndroidHarness)ctx).removeSplashScreen();
|
||||
}
|
||||
firstDrawFrame = false;
|
||||
}
|
||||
|
||||
if (autoFlush)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user