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

android – 如何从MapController捕获放大缩小动画的结尾?,第1张

概述这里只是一个有趣的查询,有一种方法可以在调用缩放动画序列结束时捕获: MapController.zoomIn() or MapController.zoomOut(); 我知道它确实启动了一个动画序列来放大/缩小到下一个级别,但是没有已知的方法可以找到/谷歌搜索等,以找出它何时完成该序列.我需要能够在停止时运行更新命令,以便我的地图正确更新. 我发现通过在调用上面的函数后运行update命令,P 这里只是一个有趣的查询,有一种方法可以在调用缩放动画序列结束时捕获:

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

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

我发现通过在调用上面的函数后运行update命令,Projection不是来自缩小级别,而是介于两者之间(所以我无法显示我需要的所有数据).

解决方法@H_403_19@ 我不得不承认我在这里受到了抨击,这是一个黑客攻击,但它很有效.我开始时需要知道何时发生了缩放,并且一旦我迷上了(并且在一些有趣的调试之后)我发现一些值是“缩放之间”值,所以我需要等到缩放完成后.

正如Stack Overflow上其他地方所建议的那样,我的缩放侦听器是一个重写的MapVIEw.dispatchDraw,用于检查自上次以来缩放级别是否已更改.

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

我的第一个Stack Overflow帖子!喔喔!

公共类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捕获放大/缩小动画的结尾?全部内容,希望文章能够帮你解决android – 如何从MapController捕获放大/缩小动画的结尾?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1124146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存