我想通过'onTouchEvent'捕捉触摸事件的坐标。现在在我的活动中,我有以下代码可以做到这一点:
public boolean onTouchEvent(MotionEvent event) {
try {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Point p = new Point();
p.set((int) event.getRawX(), (int) event.getRawY());
// The point is added to a list here
return true;
}
updateDraw();
}
catch (Exception e) {
Log.wtf("Error", e.getMessage());
}
return false;
}
Activity 的 XML 布局如下所示:
<LinearLayout 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"
tools:context=".MarkLinesActivity" >
<ImageView
android:id="@+id/handView"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:scaleType="fitXY" />
现在在 updateDraw() 函数中出现了实际问题。因为我尝试通过“onTouchEvent”捕捉 3 个坐标并使用“路径”绘制它们。不幸的是,这些点总是在不正确的位置。这是 updateDraw() 内部的内容:
Canvas tempCanvas = new Canvas(currentBitmap);
tempCanvas.drawBitmap(origBitmap, 0, 0, null);
tempCanvas.drawPath(p, pa);
这就是我为路径创建坐标的方式:
p.moveTo(points.get(currentLineState).get(0).x, points.get(currentLineState).get(i).y);
for (int i = 1; i < 3; i++) {
try {
p.lineTo( (points.get(currentLineState).get(i).x),
(points.get(currentLineState).get(i).y) );
} catch (Exception e) {
}
}
}
注意:points 被定义为HashMap<String, ArrayList<Point>>
并且 p 是 Path 实例。
updateDraw() 的最后一部分是在 ImageView 上绘制 canvas 创建的内容:
((ImageView) findViewById(R.id.handView)).setImageBitmap(currentBitmap);
现在我的问题是:获取实际坐标的方式是否有问题(我也尝试使用 event.getX() 等)或者可能是 XML 的问题?我还尝试自己从 ImageView 扩展一个类并通过覆盖“onDraw”进行绘制,但这也为这些点创建了不正确的位置。谢谢。