package com.sailrobotics.posterize;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Anandh on 07-26-15.
*/
public class PlotPoint extends SurfaceView
{
private final SurfaceHolder surfaceHolder;
private Context context;
private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
float x, y;
List<Point> listPoints;
public PlotPoint(Context context) {
super(context);
this.context = context;
surfaceHolder = getHolder();
setWillNotDraw (false);
listPoints = new ArrayList<Point>();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.e("post", "draw");
// Setting the color of the circle
paint.setStyle(Paint.Style.FILL);
// Draw the circle at (x,y) with radius 15
for (int i=0;i < listPoints.size(); i++)
{
if(i == 0 || i == 1)
{
paint.setColor(Color.RED);
}
else
{
paint.setColor(Color.GREEN);
}
canvas.drawCircle(listPoints.get(i).x, listPoints.get(i).y, 10, paint);
paint.setStrokeWidth(3);
if(i ==1)
{
canvas.drawLine(listPoints.get(0).x, listPoints.get(0).y, listPoints.get(1).x, listPoints.get(1).y, paint);
}
if(i == 3)
{
canvas.drawLine(listPoints.get(2).x, listPoints.get(2).y, listPoints.get(3).x, listPoints.get(3).y, paint);
}
Log.e("post", listPoints.get(i).x + " " + listPoints.get(i).y + "");
}
// Redraw the canvas
//invalidate();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
if (surfaceHolder.getSurface().isValid()) {
x = event.getX();
y = event.getY();
if(listPoints.size() > 3)
{
Log.e("post", "not allowed");
return false;
}
listPoints.add(new Point((int)x, (int)y));
invalidate();
}
Log.e("post", event.getX() + " " + event.getXPrecision() + " " + + event.getRawX() + " " + event.getY() + " " + event.getYPrecision() + " ");
}
return false;
}
public void resetCanvas()
{
listPoints.clear();
invalidate();
}
public double calculateDistance(double known)
{
if(listPoints.size() < 3)
{
Log.e("post", "Not enough values");
return 0;
}
FindDistanceUtil dist = new FindDistanceUtil(listPoints.get(0), listPoints.get(1), listPoints.get(2), listPoints.get(3), known);
Log.e("post", dist.calculateDistance() + "");
return dist.calculateDistance();
}
}