【发布时间】:2018-10-17 10:21:44
【问题描述】:
我有带有绘制文本和用户绘制线的自定义视图。
文本有一些 (x,y) 坐标,线条也有(只要用户绘制它)。我只是想比较一下,线坐标与文本的坐标相同。
但是由于很难用手指打出精确的坐标,所以用户无法直接比较它,看起来他连接了2个文本,但坐标略有不同。
我怎样才能正确地做到这一点?
这是我的直接比较代码(方法isCorrectConnection):
public class FingerLineView extends View {
private final Paint mPaint;
private final Paint mPaintText;
private float startX, startY;
private float endX, endY;
public FingerLineView(Context context) {
this(context, null);
}
public FingerLineView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.RED);
mPaintText = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaintText.setColor(Color.BLACK);
mPaintText.setTextSize(30);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(startX, startY, endX, endY, mPaint);
canvas.drawText("TEXT", 10, 200, mPaintText);
canvas.drawText("TEXT", 200, 200, mPaintText);
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
// Set the end to prevent initial jump
endX = event.getX();
endY = event.getY();
invalidate();
break;
case MotionEvent.ACTION_MOVE:
endX = event.getX();
endY = event.getY();
invalidate();
break;
case MotionEvent.ACTION_UP:
endX = event.getX();
endY = event.getY();
isCorrectConnection(startX, startY, endX, endY, 10, 200, 200, 200);
invalidate();
break;
}
return true;
}
public boolean isCorrectConnection(float startX, float startY, float endX, float endY,
float textX1, float textY1, float textX2, float textY2) {
return startX == textX1 && startY == textY1 && endX == textX2 && endY == textY2;
}
}
【问题讨论】:
-
您可以声明特定区域,因此每当用户触摸该区域中的任何位置时,行将从您想要的坐标开始。
-
@AadityaBrahmbhatt 你能给我举个例子吗?对我来说,它就像巨额支票一样:
if (0 < event.getX() && event.getX() < 20 && 180 < event.getY() && event.getY() < 220)
标签: java android android-canvas coordinate-systems