我不确定这是否是最好的方法,但是如果您定义自己的子类ImageView
并将其命名为DrawableImageView
. 您必须确保从 实现所有基本构造函数ImageView
,然后覆盖该onTouchEvent
方法。从该事件中,您可以获取触摸坐标并将它们存储在一个中ArrayList<Point>
,并通过覆盖该onDraw
方法并“绘制”图像来使用该 ArrayList。
public class DrawableImageView extends ImageView {
ArrayList<Point> list = new ArrayList<Point>();
//constructors..
@Override
public boolean onTouchEvent (MotionEvent event) {
float x = event.getX();
float y = event.getY();
list.add(new Point(x,y));
invalidate();
}
这只是关于如何开始你的课程的一个非常简短的概述,可能不是最准确的做事方式(取决于你的具体代码)。现在,不是<ImageView>
在您的 xml 中使用标签(或者,以编程方式加载 ImageView),而是像这样引用您的子类:
<your.package.name.DrawableImageView
/>
编辑
针对您的评论,没有预先确定的方式来绘制图像。你必须自己实现,这就是为什么我建议存储Points
在 ArrayList 中。我不确定您要在这里实现什么,但是要在您必须覆盖的图像上绘制(例如)黑点onDraw
:
public void onDraw(Canvas c) {
super.onDraw(c);
for(Point p : list) {
//Draw black point at x and y.. I'm posting from my cell so I can't go into much detail
}
}
此外,要强制视图重绘自身,您需要使用invalidate()
您的方法onTouchEvent()
(我在上面添加)。