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