2017-02-13 3 views
0

У меня есть пользовательский вид на Android, который содержит onDraw вместе с методом onTouchEvent, и я бы хотел записать все коснувшиеся координаты X за последние 2 секунды. То, что я имел в виду, это простой массив с плавающей точкой, который заполняется motionEvent.getX(), но я не знаю, как впоследствии удалить «старые» координаты или даже инициализировать такой динамический массив.Как записывать/отслеживать координаты onTouch прошлых X секунд?

ответ

0

Первое, что вам нужно сделать, это создать пользовательский объект-обертку, который будет содержать касание координат X/Y, а также отметку времени, в которой находятся координаты. Примером может теоретически выглядеть следующим образом:

public class TouchRecord { 
float x; 
float y; 
long expiry = -1L; 

/** 
* Default constructor taht will not set an expiration time. 
* @param x 
* @param y 
*/ 
public TouchRecord(float x, float y) { 
    this.x = x; 
    this.y = y; 
} 

/** 
* Overloaded constructor that will handle setting up the touch record expiration time. 
* 
* @param x 
* @param y 
* @param millisToExpiry 
*/ 
public TouchRecord(float x, float y, long recieved, long millisToExpiry) { 
    this.x = x; 
    this.y = y; 
    // Store the time this touch record should be expired based on the current uptime and the 
    // milliseconds in the touch record is valid. 
    this.expiry = SystemClock.uptimeMillis() + millisToExpiry; 
} 

public float getY() { 
    return y; 
} 

public float getX() { 
    return x; 
} 

public boolean hasExpired() { 
    // If the expiry value hasn't been set always return false. 
    return (expiry != -1 ? (SystemClock.uptimeMillis() >= expiry): false); 
} 

}

Тогда внутри вашего пользовательского вида в onTouchEvent (MotionEvent) вы прислушайтесь к действию MotionEvent.ACTION_DOWN и создать новый TouchRecord OBJ и передать в Х , Y и значения истечения в конструктор и добавьте obj в ArrayList, так как он может динамически изменять размер по команде (это необходимо, потому что система может быть затоплена дюжиной сенсорных событий очень быстро, и вам трудно точно знать, сколько вас получат через 2 секунды). Подготовьте обработчик, который будет бесконечно выполнять runnable каждые 2 секунды (или даже меньше, если вы хотите, чтобы ваши сенсорные записи оставались максимально точными и актуальными), которые будут перебирать все TouchRecords и удалять все истекшие индексы.

Смежные вопросы