【问题标题】:how can i draw multiple lines in layout that save the previous drawn lines?如何在布局中绘制多条线以保存先前绘制的线?
【发布时间】:2014-04-05 13:37:00
【问题描述】:

我已经使用paint 和canvas 和draw 方法绘制了一条线。 但现在线已成功绘制。 但是当我要画第二条线时,它会抹去之前画的线。 并开始画一条新线。

【问题讨论】:

  • 你能把你的代码粘贴到这里吗?
  • 是的,我会的,但它不会为我的问题提供编辑选项,因为我只是对此不熟悉..那么如何粘贴代码..

标签: android graphics


【解决方案1】:

在我看来,存储绘制的线条并让用户能够操纵它们只是适度复杂。

创建一个 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);
        }


    }

玩得开心!

【讨论】:

  • thanx...但是你能用xml布局发布所有代码吗??
  • 您是在问如何将自定义View 添加到布局中?
  • 不是自定义视图,但是当用户触摸屏并画线时,它允许绘制多条线并显示以前绘制的线......因为现在当我画线时它会允许但不显示上一张直接画新..
  • i want solution for that。没有人会为您编写代码。我已经给了你所有你需要做的事情。
  • 我已经完成了,但唯一的问题是不显示之前绘制的线。
猜你喜欢
  • 2018-10-02
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多