对于反应时间应用,我在ImageDrawable
上设置新的ImageView
后,尝试获取图像在屏幕上显示的确切时间。
设置图像资源后,简单地获取时间戳的准确性不够准确,因为在ImageView.setImageDrawable()
之后,Android仍会渲染图像,并在实际显示图像之前等待下一次屏幕刷新。
为了更接近实际显示时间,我到目前为止扩展了ImageView以在onDraw()
中安排Choreographer.FrameCallBack
。
Choreographer.FrameCallback mFrameCallback = new Choreographer.FrameCallback() {
@Override
// From the documentation:
// This method provides the time in nanoseconds
// when the frame started being rendered.
public void doFrame(long frameTimeNanos) {
displayedAt = frameTimeNanos;
}
};
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Choreographer choreographer = Choreographer.getInstance();
choreographer.postFrameCallback(mFrameCallback);
}
这种方法能给我时间图片实际显示在屏幕上的时间吗?或者是否有其他方法可以获得更准确的时间戳?