当前位置: 代码迷 >> Android >> Android根据TouchEvent来绘图onDraw有关问题,重绘滞后严重!
  详细解决方案

Android根据TouchEvent来绘图onDraw有关问题,重绘滞后严重!

热度:48   发布时间:2016-05-01 14:55:36.0
Android根据TouchEvent来绘图onDraw问题,重绘滞后严重!!
触摸屏每次有触控信息,就调用onTouchEvent()函数,在该函数里每有一个down,move,up消息时,都会让其new一个path对象,然后将其存到一个pathInfo list链表中,同时当保存完后,立即调用 invalidate() 进行刷新即调用onDraw()进行重绘list中所有的信息。  
  问题就是,这样list数据元素比较多后,当有在触控信息时,显示信息就会非常滞后(如手抬起后,一条线还没画完); 不知道怎么解决该问题,希望有懂的能指点指点。。。。

  附上onDraw() 代码如下:

 
Java code
protected void onDraw(Canvas canvas)     {         //画背景颜色         canvas.drawColor(m_bkColor);         Rect r = canvas.getClipBounds();  //表示的是获取控件需要重新绘制的区域          if (null != mBK_Bitmap)// Draw background bitmap.         {             canvas.drawBitmap(mBK_Bitmap, 0, 0, m_bitmapPaint); //         }         if(!mEarseFlag)         {             PathInfo pathInfo;             int i = 0;             int tmp = 0;             int len = mPathInfo.size();             Log.i("-------onDraw----------", "-----------len===="+len);             for (i =tmp; i < mPathInfo.size(); i++)             {                                    pathInfo = mPathInfo.get(i);                                        if (Rect.intersects(r, pathInfo.rect))//intersects()判断两个rect区域是否有交集,                 {                       mPaint.setColor(pathInfo.color);                       mPaint.setStrokeWidth(pathInfo.penWidth);                   }                   canvas.drawPath(pathInfo.path, mPaint);               }               mPaint.setColor(0x22FF00);               canvas.drawPath(mPath, mPaint);         }    }







------解决方案--------------------
能给出全部代码不?
------解决方案--------------------
invalidate(l, t, r, b)
------解决方案--------------------
谈谈我的理解啊,你说每次有触摸消息你就new个path,加到list里,然后draw里面无论怎样都会draw所有的path?你这样设计结果是必然的啊,list里面元素多了,速度就慢了。

首先要定位问题,看看每次draw到底花了多少时间,花在了哪里。
其次,考虑下你这种方式,每个path都会重新画,无论以前画过没有,这个方式可不可以优化?
  相关解决方案