Я пытаюсь добиться, что один пункт под названием first
в моем коде, чтобы присоединиться к второй точке second
с помощью движения пальцев от first
точки к second
, линия не должна быть прямой, независимо от того, что, и если first
точка не достигнет second
точки, линия должна исчезнуть в ACTION_UP.Как рисовать Straignt Line между двумя точками?
Я получил вдохновение от: https://play.google.com/store/apps/details?id=nf.co.sumwu.dropdot&hl=en
Я пытаюсь добиться этого с помощью метода OnDraw с CustomView
Вот моя попытка:
public class MyGFX extends View{
// setup initial color
private final int paintColor = Color.BLACK;
// defines paint and canvas
private Paint drawPaint;
Point first , second;
private Path path = new Path();
public MyGFX(Context context,AttributeSet attrs) {
super(context, attrs);
setupPaint(); // same as before
first = new Point(100,100);
second = new Point(200,100);
}
// Get x and y and append them to the path
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
// Checks for the event that occurs
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
boolean insideCircle =
(2*((int)pointX - (first.x + 2))) + (2*((int)pointY - (first.y + 2))) <= (2 * 2);
if(insideCircle){
// Starts a new line in the path
path.moveTo(first.x,first.y);
Toast.makeText(getContext(), "path.moveto is called \n first.x = "
+first.x+" first.y = "+first.y+" px ="+pointX+" py ="+pointY,
Toast.LENGTH_SHORT).show();
}
break;
case MotionEvent.ACTION_MOVE:
boolean insideCircle2 =
(2*(pointX - (second.x + 2))) + (2*(pointY - (second.y + 2))) <= (2 * 2);
if(insideCircle2){
// Starts a new line in the path
path.moveTo(pointX, pointY);
}
// Draws line between last point and this point
path.lineTo(pointX, pointY);
postInvalidate(); // Indicate view should be redrawn
break;
case MotionEvent.ACTION_UP:
path.close();
break;
default:
return false;
}
return true; // Indicate we've consumed the touch
}
// Setup paint with color and stroke styles
private void setupPaint() {
drawPaint = new Paint();
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(5);
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeJoin(Paint.Join.ROUND);
drawPaint.setStrokeCap(Paint.Cap.ROUND);
}
// Draws the path created during the touch events
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(first.x, first.y, 2, drawPaint);
canvas.drawCircle(second.x, second.y, 2, drawPaint);
if(!path.isEmpty())
canvas.drawPath(path, drawPaint);
}
}
общие парни кто-нибудь? –
https://gist.github.com/lecho/4332335 проверьте это ... надеюсь, что это поможет ... спросите далее :) –
@thestalker Я собираюсь попробовать его, а затем снова отправить. –