gpt4 book ai didi

android - 如何从 MapController 捕获放大/缩小动画的结尾?

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:56 27 4
gpt4 key购买 nike

这里只是一个有趣的查询,有没有一种方法可以在调用以下任一方法时捕获缩放动画序列何时结束:

MapController.zoomIn() or MapController.zoomOut();

我知道它确实会启动一个动画序列以放大/缩小到下一个级别,但是我无法找到/谷歌搜索等已知方法来确定它何时完成该序列。我需要能够在停止时运行更新命令,以便我的 map 正确更新。

我发现,通过在调用上述函数后运行更新命令,投影不是来自缩小级别,而是介于两者之间(因此我无法显示我需要的所有数据)。

最佳答案

我不得不承认我在这里下注了,这是一个 hack,但效果很好。我开始需要知道何时发生缩放,一旦我连接到它(并经过一些有趣的调试)我发现一些值在“缩放”值之间,所以我需要等到缩放完成后。

正如 Stack Overflow 上其他地方所建议的那样,我的缩放监听器是一个覆盖的 MapView.dispatchDraw,它会检查自上次以来缩放级别是否发生了变化。

除此之外,我还添加了一个 isResizing 方法,用于检查自 getLongitudeSpan 值停止更改以来时间戳是否超过 100 毫秒。效果很好。这是代码:

我的第一篇 Stack Overflow 帖子!呼呼!

公共(public)类 MapViewWithZoomListener 扩展 MapView {

private int oldZoomLevel = -1;
private List<OnClickListener> listeners = new ArrayList<OnClickListener>();
private long resizingLongitudeSpan = getLongitudeSpan();
private long resizingTime = new Date().getTime();

public MapViewWithZoomListener(Context context, String s) {
super(context, s);
}

public MapViewWithZoomListener(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}

public MapViewWithZoomListener(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
}

public boolean isResizing() {
// done resizing if 100ms has elapsed without a change in getLongitudeSpan
return (new Date().getTime() - resizingTime < 100);
}

public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
if (getZoomLevel() != oldZoomLevel) {
new AsyncTask() {
@Override
protected Object doInBackground(Object... objects) {
try {
if (getLongitudeSpan() != resizingLongitudeSpan) {
resizingLongitudeSpan = getLongitudeSpan();
resizingTime = new Date().getTime();
}
Thread.sleep(125); //slightly larger than isMoving threshold
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
if (!isResizing() && oldZoomLevel != getZoomLevel()) {
oldZoomLevel = getZoomLevel();
invalidate();
for (OnClickListener listener : listeners) {
listener.onClick(null);
}
}
}
}.execute();
}
}

public void addZoomListener(OnClickListener listener) {
listeners.add(listener);
}

关于android - 如何从 MapController 捕获放大/缩小动画的结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com