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()); } }