2013-08-12 3 views
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); 
    } 

을 시도했지만 해고되지 않습니다. 어떻게 해결할 수 있습니까?

답변

0

이것은 사용자가 setOnFocusChangeListener을 사용하는 방식이 아닙니다. 이 메서드는 사용자가 직접 호출하고 포커스가 변경 될 때 이벤트를 수신하는 수신기 콜백 객체를 설정하도록 설계되었습니다. 따라서 대신

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

으로 전화를 걸어 onFocusChanged에서 작업하십시오.

그러나 포커스를 받거나 잃을 때 아이콘을 변경하는 더 좋은 방법이 있습니다. OverlayItem.ITEM_STATE_FOCUSED_MASK 상태가 항목에 포커스가있을 때 사용할 드로어 블 상태로 설정된 StateListDrawable을 만들 수 있습니다. 프로그래밍 방식으로 하나를 만들 수 있습니다.

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

그런 다음 해당 항목의 아이콘으로 사용할 수 있습니다.

+0

이것은 나를 위해 작동하지 않았다. 나는 그것을 전달하기 위해 addState에 "new int [] android.R.attr.state_pressed}"를 전달해야했다. – Jeremy