我在ImageView上的onTouch事件上抓取手指的位置时遇到问题。基本上我得到手指触摸的位置,然后我开始绘制一条线,但我绘制它的位置与我的触摸位置有很大不同。我把我的代码解释了一下:
首先,我使用此方法获取触摸位置:
public boolean onTouch(View view, MotionEvent event) {
if (first == true)
{
x = event.getX();
y = event.getY();
Toast.makeText(getApplicationContext(), String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
first = false;
}
else
{
if (event.getHistorySize() == 0)
{
x = event.getX();
y = event.getY();
}
if (x == 0 && y == 0)
{
x = event.getX();
y = event.getY();
}
canvas.drawLine(x, y, event.getX(), event.getY(), paint);
x = event.getX();
y = event.getY();
imageView.invalidate();
}
return true;
}
然后当我点击一个按钮时,我使用另一种方法绘制一条线:
public void btnMove_Click(View view)
{
if(orientation == "UP")
{
canvas.drawLine(x, y, x, y - pixelFoot, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
y -= pixelFoot;
imageView.invalidate();
}
else if(orientation == "DOWN")
{
canvas.drawLine(x, y, x, y + pixelFoot, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
y += pixelFoot;
imageView.invalidate();
}
else if(orientation == "LEFT")
{
canvas.drawLine(x, y, x - pixelFoot, y, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
x -= pixelFoot;
imageView.invalidate();
}
else if(orientation == "RIGHT")
{
canvas.drawLine(x, y, x + pixelFoot, y, paint);
Toast.makeText(getApplicationContext(), "Dibujado en " + String.valueOf(x) + " " + String.valueOf(y), Toast.LENGTH_LONG).show();
x += pixelFoot;
imageView.invalidate();
}
}
我在btnMove_Click代码上收到的X和Y值与onTouch事件上的值相同,但行位置不同。 (通过点击绘制时的线位置得到“坏”的X和Y位置)
我得到的结果是下一个:
我的XML布局文件是下一个:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="800px"
android:layout_height="564px"
android:layout_alignParentLeft="true" >
<ImageView
android:id="@+id/imgFingerPaint"
android:layout_width="800px"
android:layout_height="564px"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/edittext_rounded_corners" />
</RelativeLayout>
</RelativeLayout>
谢谢!
编辑:另外我看到Image中的ImageView比设计视图中的小,我不知道为什么。如果我在imageView的右边缘附近做了触摸事件,那么X和Y的误差小于我在左边的其他位置的误差。