如何记录/跟踪过去X秒的onTouch坐标?

时间:2017-02-13 20:11:36

标签: android arrays coordinates seconds ontouch

我在Android中有一个自定义视图,其中包含onDraw和onTouchEvent方法,我想记录过去2秒内所有触摸的X坐标。我的想法是简单的浮点数组,由motionEvent.getX()填充,但我不知道如何删除“旧”坐标,甚至不知道如何初始化这样的动态数组。

1 个答案:

答案 0 :(得分: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,并将X,Y和expiration值传入构造函数,并将obj添加到ArrayList中因为它可以根据命令动态调整大小(这是必要的,因为系统可以很快地充斥着十几个触摸事件,并且很难确切地知道你将在2秒内收到多少个)。准备一个处理程序,它将每2秒无限期地执行一次runnable(如果你希望你的触摸记录保持尽可能准确和最新,则更少),它将迭代所有的TouchRecords并删除所有过期的索引。