diff options
author | djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-06-13 16:58:40 +0000 |
---|---|---|
committer | djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-06-13 16:58:40 +0000 |
commit | e32b5837c3f35b80502759f3de3e8cadf6625f4e (patch) | |
tree | 9073864ddc2d7ec2d5b83fb1c318218f41dc7d89 /android_sample/SampleApp/src/com | |
parent | fc0685652ea1617b93aed84c7674fcafd55a30f6 (diff) |
Updates to the Android SampleApp
http://codereview.appspot.com/4602049/
git-svn-id: http://skia.googlecode.com/svn/trunk@1567 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'android_sample/SampleApp/src/com')
-rw-r--r-- | android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java | 149 | ||||
-rw-r--r-- | android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java | 111 |
2 files changed, 214 insertions, 46 deletions
diff --git a/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java b/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java index b02c4d7fe4..fe733603eb 100644 --- a/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java +++ b/android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java @@ -19,94 +19,151 @@ package com.skia.sampleapp; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; +import android.opengl.GLSurfaceView; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.util.AttributeSet; import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + public class SampleApp extends Activity { private TextView mTitle; - - public class SampleView extends View { - public SampleView(Context context) { - super(context); - createOSWindow(this); - } - - @Override - protected void onDraw(Canvas canvas) { - drawToCanvas(canvas); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - updateSize(w, h); - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - final int x = (int) event.getX(); - final int y = (int) event.getY(); - final int action = event.getAction(); - handleClick(x, y, action); - return true; - } - } + private SampleView mView; @Override - public void onCreate(Bundle savedInstanceState) - { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - init(); setContentView(R.layout.layout); mTitle = (TextView) findViewById(R.id.title_view); LinearLayout holder = (LinearLayout) findViewById(R.id.holder); - View view = new SampleView(this); - holder.addView(view, new LinearLayout.LayoutParams( + mView = new SampleView(this); + + holder.addView(mView, new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + + mTitle.setVisibility(View.GONE); + getActionBar().setDisplayShowHomeEnabled(false); + } @Override - public void onDestroy() - { - term(); + public void onDestroy() { + mView.queueEvent(new Runnable() { + @Override + public void run() { + term(); + } + }); super.onDestroy(); } @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.sample, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.overview: + mView.queueEvent(new Runnable() { + @Override + public void run() { + handleKeyDown(KeyEvent.KEYCODE_BACK, 0); + } + }); + return true; + case R.id.next: + mView.queueEvent(new Runnable() { + @Override + public void run() { + handleKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, 0); + } + }); + return true; + default: + return false; + } + } + + @Override public boolean dispatchKeyEvent(KeyEvent event) { + final int keycode = event.getKeyCode(); + if (keycode == KeyEvent.KEYCODE_BACK) { + if (event.getAction() == KeyEvent.ACTION_UP) { + finish(); + } + return true; + } switch (event.getAction()) { case KeyEvent.ACTION_DOWN: - int uni = event.getUnicodeChar(event.getMetaState()); - return handleKeyDown(event.getKeyCode(), uni); + final int uni = event.getUnicodeChar(event.getMetaState()); + mView.queueEvent(new Runnable() { + @Override + public void run() { + handleKeyDown(keycode, uni); + } + }); + + return true; case KeyEvent.ACTION_UP: - return handleKeyUp(event.getKeyCode()); + mView.queueEvent(new Runnable() { + @Override + public void run() { + handleKeyUp(keycode); + } + }); + return true; default: return false; } } + private static final int SET_TITLE = 1; + + private Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case SET_TITLE: + mTitle.setText((String) msg.obj); + SampleApp.this.getActionBar().setSubtitle((String) msg.obj); + break; + default: + break; + } + } + }; + @Override public void setTitle(CharSequence title) { - mTitle.setText(title); + mHandler.obtainMessage(SET_TITLE, title).sendToTarget(); } - private native void drawToCanvas(Canvas canvas); - private native void init(); - private native void term(); + native void draw(); + native void init(); + native void term(); // Currently depends on init having already been called. - private native void createOSWindow(SampleView view); - private native void updateSize(int w, int h); - private native void handleClick(int x, int y, int state); - private native boolean handleKeyDown(int key, int uni); - private native boolean handleKeyUp(int key); + native void createOSWindow(GLSurfaceView view); + native void updateSize(int w, int h); + native void handleClick(int x, int y, int state); + native boolean handleKeyDown(int key, int uni); + native boolean handleKeyUp(int key); + native void zoom(float factor); static { System.loadLibrary("skia-sample"); diff --git a/android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java b/android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java new file mode 100644 index 0000000000..0d76dcea93 --- /dev/null +++ b/android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2011 Skia + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.skia.sampleapp; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.opengl.GLSurfaceView; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.ScaleGestureDetector.OnScaleGestureListener; + +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.opengles.GL10; + +public class SampleView extends GLSurfaceView implements OnScaleGestureListener { + + private final SampleApp mApp; + private ScaleGestureDetector mDetector; + public SampleView(SampleApp app) { + super(app); + mApp = app; + setEGLContextClientVersion(2); + setEGLConfigChooser(8,8,8,8,0,8); + setRenderer(new SampleView.Renderer()); + setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); + mDetector = new ScaleGestureDetector(app, this); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + mDetector.onTouchEvent(event); + if (mDetector.isInProgress()) { + return true; + } + + final int x = (int) event.getX(); + final int y = (int) event.getY(); + final int action = event.getAction(); + queueEvent(new Runnable() { + @Override + public void run() { + mApp.handleClick(x, y, action); + } + }); + + return true; + } + // ScaleGestureDetector.OnScaleGestureListener implementation + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + return true; + } + + @Override + public boolean onScale(ScaleGestureDetector detector) { + if (detector.getScaleFactor() != 1) { + final float difference = detector.getCurrentSpan() - detector.getPreviousSpan(); + queueEvent(new Runnable() { + @Override + public void run() { + mApp.zoom(difference * .03f); + } + }); + + return true; + } + return false; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + + } + + private class Renderer implements GLSurfaceView.Renderer { + public void onDrawFrame(GL10 gl) { + mApp.draw(); + } + + public void onSurfaceChanged(GL10 gl, int width, int height) { + mApp.updateSize(width, height); + } + + public void onSurfaceCreated(GL10 gl, EGLConfig config) { + gl.glClearStencil(0); + gl.glClear(gl.GL_STENCIL_BUFFER_BIT); + mApp.init(); + mApp.createOSWindow(SampleView.this); + } + } +}
\ No newline at end of file |