1

我有一张带有一些标记的地图。标记在扩展的类中定义ItemizedOverlay<OverlayItem>。在 onTap() 上,我更改了标记的图像。

当它失去焦点时,我也想更改标记图像。

我试过了

   @Override
    public void setOnFocusChangeListener(OnFocusChangeListener l) {
        Drawable onTapMarker = mContext.getResources().getDrawable(R.drawable.pin_blue);
        currentItem.setMarker(onTapMarker);
        super.setOnFocusChangeListener(l);
    }

但从未被解雇。我该如何解决这个问题?

4

1 回答 1

0

那不是你使用的方式setOnFocusChangeListener。此方法旨在由您直接调用并设置一个侦听器回调对象,该对象将在焦点更改时接收事件。所以你会打电话给

mItemizedOverlay.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChanged(ItemizedOverlay<?> overlay, OverlayItem newFocus) {
        // TODO Auto-generated method stub
    }
});

并在 onFocusChanged 中完成您的工作。

但是有一种更好的方法可以在图标接收/失去焦点时更改图标。您可以创建一个 StateListDrawable,它的OverlayItem.ITEM_STATE_FOCUSED_MASK状态设置为您想要在项目获得焦点时使用的可绘制对象。您可以以编程方式创建一个

StateListDrawable d = new StateListDrawable();
d.addState(new int[]{OverlayItem.ITEM_STATE_FOCUSED_MASK}, mFocusedDrawable);
d.addState(new int[]{}, mDefaultDrawable);

然后将其用作您的项目的图标。

于 2013-08-17T22:40:27.603 回答