setFocus (overlayItem) ItemizedOverlay не работает - PullRequest
6 голосов
/ 19 января 2010

Я работаю над приложением для Android и могу отображать несколько значков на карте с помощью ItemizedOverlay, и я также реализовал метод ItemTOverlay onTap (int index) для отображения информации о значках в необходимом окне.

Теперь я хочу изменить значок выбранного наложения, когда пользователь нажимает на какой-либо другой компонент. Я вызываю setFocus (OverlayItem) метод ItemizedOverlay, чтобы отобразить другой значок определенного оверлея. он работает хорошо, когда пользователь нажимает на какое-либо определенное наложение, но не меняет значок, когда я вызываю метод setFocus (OverlayItem).

Есть указатели? Как лучше всего программно изменить значок выбранного наложения в mapView?

Я переопределил метод getMarker моего пользовательского класса OverlayItem для отображения разных маркеров для разных состояний overlayItem. и я хочу использовать метод setFocus (OverlayItem), чтобы изменить состояние OverlayItem, а также изменить маркер при его выборе.

@Override
public Drawable getMarker(int stateBitset){
 if(stateBitset==0){
  icon = Util.getCategoryMapIcon(0);   
  icon.setBounds(0-icon.getIntrinsicWidth()/2, 0-icon.getIntrinsicHeight(), icon.getIntrinsicWidth()/2, 0);
  return icon;
 }else {
  icon = Util.getCategoryMapIcon(OverlayItem.ITEM_STATE_SELECTED_MASK);
  icon.setBounds(0-icon.getIntrinsicWidth()/2, 0-icon.getIntrinsicHeight(), icon.getIntrinsicWidth()/2, 0);
  return icon;   
 }
}

здесь Util.getCategoryMapIcon (0) - это служебный метод для возврата соответствующего значка, этот метод принимает некоторые параметры, которые я удалил, чтобы сделать этот пример простым.

и ниже - код для изменения состояния

Button leftNavigation = (Button) findViewById(R.id.left_navigation_button);
leftNavigation.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
  OverlayItem item = searchResultsOverlay.get(index+1);
  setFocus(item);
 }
});

Любая помощь будет высоко ценится. Спасибо, Аамир

1 Ответ

0 голосов
/ 19 января 2010

В своем коде getMarker попробуйте вернуть StateListDrawable (что соответствует <selector> в рисуемом XML), который содержит рисоваемый элемент по умолчанию (без состояний) и рисованный объект с состоянием android.R.attr.state_focused.

См. Связанный вопрос здесь: Android ListView Selector Color

...