public NavitGraphics2( Activity activity, NavitGraphics2 parent, int x, int y, int w, int h, int alpha, int wraparound, int use_camera) { if (parent == null) { this.activity = activity; flb = new FloatBuffer[10000]; view = new GLSurfaceView(activity) { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(draw_bitmap, pos_x, pos_y, null); if (overlay_disabled == 0) { Object overlays_array[]; overlays_array = overlays.toArray(); for (Object overlay : overlays_array) { NavitGraphics2 overlay_graphics = (NavitGraphics2) overlay; if (overlay_graphics.overlay_disabled == 0) { int x = overlay_graphics.pos_x; int y = overlay_graphics.pos_y; if (overlay_graphics.pos_wraparound != 0 && x < 0) x += bitmap_w; if (overlay_graphics.pos_wraparound != 0 && y < 0) y += bitmap_h; canvas.drawBitmap(overlay_graphics.draw_bitmap, x, y, null); } } } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); draw_bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); draw_canvas = new Canvas(draw_bitmap); bitmap_w = w; bitmap_h = h; SizeChangedCallback(SizeChangedCallbackID, w, h); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int action = event.getAction(); int x = (int) event.getX(); int y = (int) event.getY(); if (action == MotionEvent.ACTION_DOWN) { // Log.e("NavitGraphics", "onTouch down"); ButtonCallback(ButtonCallbackID, 1, 1, x, y); } if (action == MotionEvent.ACTION_UP) { // Log.e("NavitGraphics", "onTouch up"); ButtonCallback(ButtonCallbackID, 0, 1, x, y); // if (++count == 3) // Debug.stopMethodTracing(); } if (action == MotionEvent.ACTION_MOVE) { // Log.e("NavitGraphics", "onTouch move"); MotionCallback(MotionCallbackID, x, y); } return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { int i; String s = null; boolean handled = true; i = event.getUnicodeChar(); Log.e("NavitGraphics", "onKeyDown " + keyCode + " " + i); // Log.e("NavitGraphics","Unicode "+event.getUnicodeChar()); if (i == 0) { if (keyCode == android.view.KeyEvent.KEYCODE_DEL) { s = java.lang.String.valueOf((char) 8); } else if (keyCode == android.view.KeyEvent.KEYCODE_MENU) { s = java.lang.String.valueOf((char) 1); } else if (keyCode == android.view.KeyEvent.KEYCODE_SEARCH) { s = java.lang.String.valueOf((char) 19); } else if (keyCode == android.view.KeyEvent.KEYCODE_BACK) { s = java.lang.String.valueOf((char) 27); } else if (keyCode == android.view.KeyEvent.KEYCODE_CALL) { s = java.lang.String.valueOf((char) 3); } else if (keyCode == android.view.KeyEvent.KEYCODE_VOLUME_UP) { s = java.lang.String.valueOf((char) 21); handled = false; } else if (keyCode == android.view.KeyEvent.KEYCODE_VOLUME_DOWN) { s = java.lang.String.valueOf((char) 4); handled = false; } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_CENTER) { s = java.lang.String.valueOf((char) 13); } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_DOWN) { s = java.lang.String.valueOf((char) 16); } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_LEFT) { s = java.lang.String.valueOf((char) 2); } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_RIGHT) { s = java.lang.String.valueOf((char) 6); } else if (keyCode == android.view.KeyEvent.KEYCODE_DPAD_UP) { s = java.lang.String.valueOf((char) 14); } } else if (i == 10) { s = java.lang.String.valueOf((char) 13); } else { s = java.lang.String.valueOf((char) i); } if (s != null) { KeypressCallback(KeypressCallbackID, s); } return handled; } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.e("NavitGraphics", "onKeyUp " + keyCode); return true; } @Override public boolean onTrackballEvent(MotionEvent event) { Log.e( "NavitGraphics", "onTrackball " + event.getAction() + " " + event.getX() + " " + event.getY()); String s = null; if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { s = java.lang.String.valueOf((char) 13); } if (event.getAction() == android.view.MotionEvent.ACTION_MOVE) { trackball_x += event.getX(); trackball_y += event.getY(); Log.e("NavitGraphics", "trackball " + trackball_x + " " + trackball_y); if (trackball_x <= -1) { s = java.lang.String.valueOf((char) 2); trackball_x += 1; } if (trackball_x >= 1) { s = java.lang.String.valueOf((char) 6); trackball_x -= 1; } if (trackball_y <= -1) { s = java.lang.String.valueOf((char) 16); trackball_y += 1; } if (trackball_y >= 1) { s = java.lang.String.valueOf((char) 14); trackball_y -= 1; } } if (s != null) { KeypressCallback(KeypressCallbackID, s); } return true; } @Override protected void onFocusChanged( boolean gainFocus, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); Log.e("NavitGraphics", "FocusChange " + gainFocus); } }; view.setFocusable(true); view.setFocusableInTouchMode(true); renderer = new ClearRenderer(); renderer.flb = new FloatBuffer[1000]; renderer.flb_len = 0; view.setRenderer(renderer); view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); relativelayout = new RelativeLayout(activity); if (use_camera != 0) { SetCamera(use_camera); } relativelayout.addView(view); activity.setContentView(relativelayout); view.requestFocus(); } else { draw_bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); bitmap_w = w; bitmap_h = h; pos_x = x; pos_y = y; pos_wraparound = wraparound; draw_canvas = new Canvas(draw_bitmap); parent.overlays.add(this); } parent_graphics = parent; }