a521314963 2017-05-11 05:53 采纳率: 0%
浏览 1735

百度地图添加的闪烁图标怎么停止闪烁

用ListView装了一些marker的信息,点击选中的条目marker闪烁,怎么让他点击那个那个闪,不点击不闪

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 20:56
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android中,你可以使用setAlpha()方法来改变一个Drawable(比如Marker)的透明度。当你的Marker处于焦点状态时,它的alpha值会从0逐渐增加到1,从而实现闪烁的效果。

    以下是一个简单的示例:

    public void setMarkerFading(ListView listView, Marker marker) {
        int position = listView.getPositionForView(marker);
    
        if (position != -1) {
            // 获取当前Marker的坐标
            LatLng currentLatLng = marker.getPosition();
    
            // 计算闪烁间隔
            float interval = 250; // 毫秒
    
            // 设置Marker的透明度
            Drawable drawable = marker.getIcon();
            int alpha = (int) ((drawable.getDrawableState() == null ? 0 : drawable.getDrawableState().getAlpha()) * 255.0f);
            drawable.setAlpha(alpha);
            drawable.setState(Drawable.STATE_NORMAL); // 非焦点状态
    
            // 开始闪烁
            while (true) {
                try {
                    Thread.sleep(interval);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                // 设置新的闪烁颜色和位置
                int newAlpha = (int) ((drawable.getDrawableState() == null ? 0 : drawable.getDrawableState().getAlpha()) * 255.0f + 30.0f);
                drawable.setAlpha(newAlpha);
                drawable.setState(Drawable.STATE_FOCUSED); // 焦点状态
    
                // 更新Marker的位置
                LatLng nextLatLng = marker.getPosition();
                if (!currentLatLng.equals(nextLatLng)) {
                    currentLatLng = nextLatLng;
                    marker.setPosition(currentLatLng);
                }
    
                // 更新Marker的图标
                drawable.setAlpha(alpha);
                drawable.setState(Drawable.STATE_NORMAL);
            }
        }
    }
    

    这个方法会在每个Thread.sleep()之间检查是否需要继续闪烁,如果不需要,则返回,否则就重新开始闪烁。注意,这种方法可能会消耗大量的系统资源,所以在实际应用中要谨慎使用。

    此外,你也可以使用setClickable(true)来让Marker能够在被点击后跳转到另一个页面或者执行其他操作。

    评论

报告相同问题?