我目前正在开发一个允许自由绘图的应用程序。
我目前使用的方法如下:
currentLine 是一个列表,保存所有点的历史记录ACTION_MOVE
返回。
public boolean onTouchEvent (MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
Point p = new Point(event.getX(),event.getY());
currentLine.addPoint(p);
invalidate();
break;
}
return true;
}
然后我把这些点画在onDraw
我的课的方法。
@Override
protected void onDraw(Canvas c) {
super.onDraw(c);
//Draw Background Color
c.drawColor(Color.BLUE);
//Setup Paint
Paint p = new Paint();
p.setStyle(Style.FILL);
p.setColor(COLOR.WHITE);
//iterate through points
if(currentLine.size()>0){
for(int x = 0;x<currentLine.size();x++){
c.drawCircle(currentLine.get(x).getX(), currentLine.get(x).getY(), 3, p);
}
}
}
而且这种方法效果很好,没有任何滞后或任何问题。
除此之外,它没有得到enough它需要的要点。
例如,如果我要在整个屏幕上快速拖动手指,它可能只会绘制整个事件的 15 个点。
如何提高 MotionEvent 的性能/速度?我怎样才能得到more点?或者还有什么我应该做的吗?
- - 编辑 - -
我已经设法自己解决了。
而不是使用drawCircle
,我切换到drawLine
.
Example:
if(points.size()>0){
for(int x = 0;x<points.size()-1;x++){
c.drawLine(points.get(x).getX(), points.get(x).getY(), points.get(x+1).getX(), points.get(x+1).getY(), p);
}
}
这会产生实线,这就是我想要的。
但是,出于知识的考虑,我仍然想知道如何加快 MotionEvents 的速度。
详细的答案将不胜感激