aboutsummaryrefslogtreecommitdiff
path: root/demokit/app/src/com/google/android/DemoKit/JoystickView.java
diff options
context:
space:
mode:
Diffstat (limited to 'demokit/app/src/com/google/android/DemoKit/JoystickView.java')
-rw-r--r--demokit/app/src/com/google/android/DemoKit/JoystickView.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/demokit/app/src/com/google/android/DemoKit/JoystickView.java b/demokit/app/src/com/google/android/DemoKit/JoystickView.java
new file mode 100644
index 0000000..020e276
--- /dev/null
+++ b/demokit/app/src/com/google/android/DemoKit/JoystickView.java
@@ -0,0 +1,85 @@
+package com.google.android.DemoKit;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.View;
+
+public class JoystickView extends View {
+
+ private Drawable mJoystickBackground;
+ private Drawable mJoystickPressed;
+ private Drawable mJoystickNormal;
+
+ private int fX;
+ private int fY;
+ Boolean fPressed;
+ private Paint mLabelPaint;
+ private String mLabelText;
+
+ public JoystickView(Context context) {
+ super(context);
+ initJoystickView(context);
+ }
+
+ public JoystickView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initJoystickView(context);
+ }
+
+ public void setPosition(int x, int y) {
+ fX = x;
+ fY = y;
+ mLabelText = String.format("%d,%d", fX, fY);
+ invalidate();
+ }
+
+ public void setPressed(boolean pressed) {
+ fPressed = pressed;
+ invalidate();
+ }
+
+ private void initJoystickView(Context context) {
+ fX = fY = 0;
+ fPressed = false;
+ Resources r = context.getResources();
+ mJoystickBackground = r.getDrawable(R.drawable.joystick_background);
+ int w = mJoystickBackground.getIntrinsicWidth();
+ int h = mJoystickBackground.getIntrinsicHeight();
+ mJoystickBackground.setBounds(0, 0, w, h);
+ mJoystickPressed = r.getDrawable(R.drawable.joystick_pressed_holo_dark);
+ mJoystickNormal = r.getDrawable(R.drawable.joystick_normal_holo_dark);
+ Utilities.centerAround(w / 2 - 4, h / 2 + 4, mJoystickNormal);
+ Utilities.centerAround(w / 2 - 4, h / 2 + 4, mJoystickPressed);
+ mLabelPaint = new Paint();
+ mLabelPaint.setColor(Color.WHITE);
+ mLabelPaint.setTextSize(24);
+ mLabelPaint.setAntiAlias(true);
+ mLabelPaint.setShadowLayer(1, 2, 2, Color.BLACK);
+ setPosition(0, 0);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ mJoystickBackground.draw(canvas);
+ Drawable indicator = fPressed ? mJoystickPressed : mJoystickNormal;
+ int w = mJoystickBackground.getIntrinsicWidth();
+ int h = mJoystickBackground.getIntrinsicHeight();
+ int x = w / 2 - 4 + fX;
+ int y = h / 2 + 4 + fY;
+ Utilities.centerAround(x, y, indicator);
+ indicator.draw(canvas);
+ canvas.drawText(mLabelText, x + 12, y + 8, mLabelPaint);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ setMeasuredDimension(mJoystickBackground.getIntrinsicWidth(),
+ mJoystickBackground.getIntrinsicHeight());
+ }
+
+}