diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
index 49de1d0..cb3a0b9 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTPad.java
@@ -4,18 +4,18 @@
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
-import android.support.v7.widget.AppCompatButton;
+import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
-import android.view.View;
import org.ntlab.radishforandroidstudio.framework.event.PadEvent;
import org.ntlab.radishforandroidstudio.framework.listener.PadListener;
import org.ntlab.radishforandroidstudio.framework.listener.SamplePadListener;
import org.ntlab.radishforandroidstudio.framework.subject.PadSubject;
-public class RWTPad extends View {
+public class RWTPad extends RWTView {
private MotionEvent touchInfo = null;
+ private Point circlePos = null;
public RWTPad(Context context) {
super(context);
@@ -32,16 +32,24 @@
init();
}
+ @Override
public void init() {
+ super.init();
// Listenerサンプル
addListener(new SamplePadListener());
}
@Override
public void onDraw(Canvas canvas) {
- super.onDraw(canvas);
+ // super.onDraw(canvas);
Paint paint = this.createRedPaint();
- canvas.drawCircle(150, 150, 100, paint);
+ canvas.drawCircle(getSize().x / 2, getSize().x / 2, getSize().x / 2, paint);
+
+ paint.setColor(Color.BLUE);
+ if (circlePos == null) {
+ circlePos = new Point(getSize().x / 2, getSize().y / 2);
+ }
+ canvas.drawCircle(circlePos.x, circlePos.y, getSize().x / 6, paint);
}
private Paint createRedPaint() {
@@ -55,10 +63,33 @@
@Override
public boolean onTouchEvent(MotionEvent event) {
+ // 中央からの距離を取得
+ float dx = event.getX() - getSize().x / 2;
+ float dy = event.getY() - getSize().y / 2;
+ float rawLen = (float)Math.sqrt(dx*dx + dy*dy);
+ float angle = (float)Math.atan2(dy, dx);
+ float maxLen = getSize().x / 2;
+ float len = rawLen / maxLen;
+ float fixLen = Math.max(Math.min(1.f, len), -1.f);
+
+ circlePos.x = (int)event.getX();
+ circlePos.y = (int)event.getY();
+
+ if (len > 1) {
+ circlePos.x = (int)(fixLen * Math.cos(angle) * maxLen + maxLen);
+ circlePos.y = (int)(fixLen * Math.sin(angle) * maxLen + maxLen);
+ }
+
touchInfo = event;
- PadEvent padEvent = new PadEvent(event, 1.0f);
+ PadEvent padEvent = new PadEvent(event, fixLen, angle);
PadSubject.getInstance().pushListeners(padEvent);
- System.out.println("Touch x:");
+
+ if (event.getAction() == MotionEvent.ACTION_UP) {
+ circlePos.x = getSize().x / 2;
+ circlePos.y = getSize().y / 2;
+ }
+
+ invalidate();
return true;
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java
new file mode 100644
index 0000000..f3b00d1
--- /dev/null
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/RWT/RWTView.java
@@ -0,0 +1,65 @@
+package org.ntlab.radishforandroidstudio.framework.RWT;
+
+import android.content.Context;
+import android.graphics.Point;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.view.View;
+
+public abstract class RWTView extends View {
+ private float dp = 1;
+ private Point size = null;
+ private Point pos = null;
+
+ public RWTView(Context context) {
+ super(context);
+ init();
+ }
+
+ public RWTView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public RWTView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ public void init() {
+ dp = getResources().getDisplayMetrics().density;
+ }
+
+ /**
+ * 画面上に表示されるサイズを取得
+ * @return Point
+ */
+ public Point getSize() {
+ if (size == null) {
+ size = new Point(getWidth(), getHeight());
+ }
+ return size;
+ }
+
+ /**
+ * 画面上に表示される左上の座標を取得
+ * @return Point
+ */
+ public Point getPosition() {
+ if (pos == null) {
+ pos = new Point(getLeft(), getTop());
+ }
+ return pos;
+ }
+
+ /**
+ * DPを乗算する
+ * @param a
+ * @return int
+ */
+ public int applyDp(int a) {
+ return (int)(a * dp);
+ }
+
+
+}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java
index 3cfa8fc..8e5d25e 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/event/PadEvent.java
@@ -4,14 +4,30 @@
public class PadEvent extends MyEvent{
private MotionEvent e;
- private float dummy;
- public PadEvent(MotionEvent e, float f) {
+ /**
+ * パッドを倒した距離
+ * 範囲は 0<=length<=1
+ */
+ private float length;
+
+ /**
+ * パッドを倒した方向
+ * 単位radian
+ */
+ private float angle;
+
+ public PadEvent(MotionEvent e, float length, float angle) {
super(e);
- dummy = f;
+ this.length = length;
+ this.angle = angle;
}
- public final float getDummy() {
- return dummy;
+ public final float getLength() {
+ return length;
+ }
+
+ public final float getAngle() {
+ return angle;
}
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java
index 0ddce68..c7d4751 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/framework/listener/SamplePadListener.java
@@ -5,7 +5,7 @@
public class SamplePadListener implements PadListener {
@Override
public boolean onEvent(PadEvent event) {
- System.out.println("PadListener Sample value:" + event.getDummy());
+ System.out.println("PadListener Length:" + event.getLength() + " angle:" + event.getAngle());
return false;
}
}
diff --git a/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java b/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java
index 123d675..5d943a9 100644
--- a/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java
+++ b/app/src/main/java/org/ntlab/radishforandroidstudio/spriteTest/TestActivity.java
@@ -8,7 +8,9 @@
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
+import android.widget.FrameLayout;
import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
import org.ntlab.radishforandroidstudio.R;
import org.ntlab.radishforandroidstudio.framework.RWT.RWTSprite;
@@ -106,7 +108,7 @@
camera.addTarget(diceObj);
// 画面との関連付け
- LinearLayout l = findViewById(R.id.game_layout);
+ FrameLayout l = findViewById(R.id.game_layout);
view = new RWTSurfaceView(this);
view.attachCamera(camera);
l.addView(view, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 54cf3d2..77628c5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,30 +6,23 @@
android:layout_height="match_parent"
tools:context=".cactusClient.MainActivity">
-
-
+
-
+ android:layout_height="match_parent">
-
+
\ No newline at end of file