【发布时间】:2018-06-02 12:03:14
【问题描述】:
在完成了一些有关触摸事件的教程并在画布上绘图后,我尝试结合所学知识并制作一个使用 2 个触摸点创建矩形的应用程序。我可以使用单个触摸点拖动并创建一个矩形,但是一旦我使用第二根手指,矩形就会开始表现得很奇怪,要么根本不绘制矩形,要么在拖动一点后消失。此外,例如,如果我通过使一个触摸点位于屏幕的左下角而另一个触摸点位于屏幕的右上角来绘制一个矩形,那么如果我将手指拖动到它们相互交叉的点,该矩形就会消失。
gif of the application running
private float xDown = 0,yDown = 0, xUp = 0, yUp = 0;
boolean touched = false;
@Override
protected void onDraw (Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT);
if(touched) {
canvas.drawRect(xDown, yDown, xUp, yUp, mPaint);
}
}
@Override
public boolean onTouchEvent (MotionEvent event) {
int fingers = event.getPointerCount();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if (fingers == 1) {
xDown = event.getX(0);
yDown = event.getY(0);
xUp = 0;
yUp = 0;
}
if (fingers == 2) {
xUp = event.getX(1);
yUp = event.getY(1);
xDown = event.getX(0);
yDown = event.getY(0);
touched = true;
}
break;
case MotionEvent.ACTION_MOVE:
if (fingers == 1) {
xUp = event.getX();
yUp = event.getY();
touched = true;
}
if (fingers == 2) {
xUp = event.getX(1);
yUp = event.getY(1);
xDown = event.getX(0);
yDown = event.getY(0);
touched = true;
}
break;
case MotionEvent.ACTION_UP:
if (fingers == 1) {
xUp = event.getX();
yUp = event.getY();
touched = true;
}
if (fingers == 2) {
xUp = event.getX(1);
yUp = event.getY(1);
xDown = event.getX(0);
yDown = event.getY(0);
touched = true;
}
break;
}
invalidate();
return true;
【问题讨论】:
标签: android canvas multi-touch