触摸屏每次有触控信息,就调用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都会重新画,无论以前画过没有,这个方式可不可以优化?