Exemplo n.º 1
0
  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;
  }