В настоящее время я работаю над приложением, которое позволяет рисовать бесплатно.
Текущий метод, который я использую, выглядит следующим образом:
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);
}
}
}
И этот метод отлично работает, без задержек и прочего.
За исключением того, что он не набирает необходимого количества очков.
Например, если я быстро проведу пальцем по всему экрану, он может нарисовать только 15 точек всего события.
Как я могу улучшить производительность / скорость MotionEvent? Как я могу получить больше баллов? Или мне нужно еще что-то сделать?
---- EDIT ----
Мне удалось решить эту проблему самостоятельно.
Вместо использования drawCircle
я переключился на drawLine
.
Пример:
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.
Будем признательны за подробный ответ