package com.pinecone.techonolgy.mcommerce.learning.android.chapter11.touchDrag;
// This file is Dot.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
public class Dot extends View {
private static final String TAG = "TouchDrag";
private float left = 0;
private float top = 0;
private float radius = 20;
private float offsetX;
private float offsetY;
private Paint myPaint;
private Context myContext;
public Dot(Context context, AttributeSet attrs) {
super(context, attrs);
// Save the context (the activity)
myContext = context;
myPaint = new Paint();
myPaint.setColor(Color.WHITE);
myPaint.setAntiAlias(true);
}
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
float eventX = event.getX();
float eventY = event.getY();
switch (action) {
case MotionEvent.ACTION_DOWN:
// First make sure the touch is on our dot,
// since the size of the dot's view is
// technically the whole layout. If the
// touch is *not* within, then return false
// indicating we don't want any more events.
if (!(left - 20 < eventX && eventX < left + radius * 2 + 20
&& top - 20 < eventY && eventY < top + radius * 2 + 20))
return false;
// Remember the offset of the touch as compared
// to our left and top edges.
offsetX = eventX - left;
offsetY = eventY - top;
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
left = eventX - offsetX;
top = eventY - offsetY;
if (action == MotionEvent.ACTION_UP) {
checkDrop(eventX, eventY);
}
break;
}
invalidate();
return true;
}
private void checkDrop(float x, float y) {
// See if the x,y of our drop location is near to
// one of our counters. If so, increment it, and
// reset the dot back to its starting position
Log.v(TAG, "checking drop target for " + x + ", " + y);
int viewCount = ((TouchDragActivity) myContext).counterLayout
.getChildCount();
for (int i = 0; i < viewCount; i++) {
View view = ((TouchDragActivity) myContext).counterLayout
.getChildAt(i);
if (view.getClass() == TextView.class) {
Log.v(TAG, "Is the drop to the right of "
+ (view.getLeft() - 20));
Log.v(TAG, " and vertically between " + (view.getTop() - 20)
+ " and " + (view.getBottom() + 20) + "?");
if (x > view.getLeft() - 20 && view.getTop() - 20 < y
&& y < view.getBottom() + 20) {
Log.v(TAG, " Yes. Yes it is.");
// Increase the count value in the TextView by one
int count = Integer.parseInt(((TextView) view).getText()
.toString());
((TextView) view).setText(String.valueOf(++count));
// Reset the dot back to starting position
left = top = 0;
break;
}
}
}
}
public void draw(Canvas canvas) {
canvas.drawCircle(left + radius, top + radius, radius, myPaint);
}
}