如何保留上一次绘制的图形不被刷新掉?
比如我要做一个随着时间的推移画出一个曲线的图形,这个曲线是由无数的短直线连成,这样就要求画下个直线时保留上一次画的直线,如何做?

解决方案 »

  1.   

    你是canvas上画吗?直接继续画,它之前的不会没掉啊
    如果你是重画的话,就需要把之前的图形也画一遍
    就像写游戏的时候,刷帧线程是每次都把整个图形画一遍的。
      

  2.   

    是在canvas上画啊,比如我每50毫秒画条短线,上一次画的线一刷新就没了,如果不刷新能显示得出来吗?我是android菜鸟,这个弄不明白啊
    我想做的效果是那个曲线随着时间的推移渐渐画出完整的部分,不需要一次性的画出。
      

  3.   

    我晕,android的绘图功能只能这样吗,我这个曲线是由上百条短直线组成,每次画当前直线时都要同时画前前面所画过的直线,当有上百条直线画的时候,那程序都没法写了啊?
      

  4.   

    只要你的数据在,就没问题。打个比方,你在时刻为0:00时,记录了有3个点ABC,此时连线为A->B->C,当时刻为1:00时,记录了4个点ABCD,那此时你只需根据你的点信息,在onDraw里面绘制出来就行。你应该以数据驱动UI的绘制,而不是造Canvas来保存上次的绘制。
      

  5.   

    我是用SurfaceView来绘制的,这位大大的方法是用什么画啊?我到现在为止学android不过两个星期的时间,还请大大说明白点啊!!!
      

  6.   

    我没用过SurfaceView,不过应该是没区别,无非就是画线而已。
      

  7.   

    当然你也可以通过holder.lockCanvas(dirty);来设定画布Canvas大小,这样子就不需要再画以前的数据了,但是这样子需要计算画布范围   如果对象太多  则代码更复杂   不仅不容易维护  对性能提升感觉也不算太大  还容易引发其它问题    所以推荐给你的做法是  你把你要画的对象列举出来(比如放到集合中)   然后每次刷新界面就画列举出来(集合中)的对象    这样子增删都很简单  一个优秀的程序员会选择这样做
      

  8.   

    SurfaceView你只管往上画,每50毫秒画点东西上去,不要去刷新
      

  9.   

    这个怎么理解啊。
    比如我的代码大致是这样的:public class rungame extends Thread
    {
        ............................
        ............................

        @Override
        public void run()
        {
            ............................
     
            while (true)
    {            canvas = holder.lockCanvas();
        Paint p = new Paint();
        p.setColor(Color.RED);
        c.drawLine(startX, startX, stopX, stopY, p);
                holder.unlockCanvasAndPost(canvas); 
      
                try
        {
            Thread.sleep(50);
        } catch (InterruptedException e)
        {
            e.printStackTrace();
        } 
                
                ......................
                 startX = XXXX;
                 startY = xxxxx;
                 stopX = xxxxx;
                 stopY = xxxxx;
                .......................
            }
        }
    }如果只管往上画,不去刷新,这个要怎么写。是不用unlockCanvasAndPost(canvas); 这种形式么?求说明白啊
      

  10.   

      postInvalidate(); 
    刷新