【发布时间】:2015-07-04 11:25:01
【问题描述】:
我正在尝试在我的代码中实现名为first 的一点,以使用从first 指向second 的手指移动加入第二点second,无论如何,线都应该是直的 em> ,如果 first 点没有到达 second 点,线应该在 ACTION_UP 上消失。
我的灵感来自: https://play.google.com/store/apps/details?id=nf.co.sumwu.dropdot&hl=en
我正在尝试通过使用 CustomView 的 onDraw 方法来实现它
这是我的尝试:
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);
}
}
【问题讨论】:
-
普通人吗?
-
gist.github.com/lecho/4332335 看看这个......希望这会有所帮助......进一步询问:)
-
@thestalker 我要试试然后再发帖。
-
没有合适的文档? @thestalker
-
你遇到了什么异常??
标签: java android touch android-animation