【发布时间】:2014-04-05 13:37:00
【问题描述】:
我已经使用paint 和canvas 和draw 方法绘制了一条线。 但现在线已成功绘制。 但是当我要画第二条线时,它会抹去之前画的线。 并开始画一条新线。
【问题讨论】:
-
你能把你的代码粘贴到这里吗?
-
是的,我会的,但它不会为我的问题提供编辑选项,因为我只是对此不熟悉..那么如何粘贴代码..
我已经使用paint 和canvas 和draw 方法绘制了一条线。 但现在线已成功绘制。 但是当我要画第二条线时,它会抹去之前画的线。 并开始画一条新线。
【问题讨论】:
在我看来,存储绘制的线条并让用户能够操纵它们只是适度复杂。
创建一个 Line 类。包括开始和结束坐标、颜色等作为类的字段和删除、移动等方法。还添加一个采用 MotionEvent 参数的方法。在此方法中,您使用 MotionEvent 确定是否已触摸此线并根据需要调整其位置。
将绘制的每条线(作为 Line 类的实例创建)的引用存储在扩展 View 类中的某种集合或列表中,ArrayList 应该这样做。然后,在 onTouch 事件中,调用每一行的触摸检测方法,并将 MotionEvent 传递给方法。
最后,通过遍历对 Line 实例的引用集合来覆盖 View 的 onDraw 回调以绘制每条线。
您还可以添加更多手势,例如长按删除等。这是这种方法的一个(完全未经测试,凭记忆编写)框架。
class Line
public float x1, x2, y1, y2;
public void detectTouch(MotionEvent motionEvent){
// code to detect a touch and adjust the x and ys accordingly
}
class DrawView extends View{
private ArrayList<Line> lines = new ArrayList<Lines>();
....
....
@Override
public void onDraw(Canvas canvas) {
super.onDraw();
for (Line line : lines){
canvas.drawLine(line.x1,line.y1,line.x2,line.y2);
}
}
@Override
public boolean onTouch(View view, MotionEvent event) {
....
....
for (Line line : lines){
line.detectTouch(MotionEvent);
}
}
玩得开心!
【讨论】:
View 添加到布局中?
i want solution for that。没有人会为您编写代码。我已经给了你所有你需要做的事情。