Atualizair animação do item do menu em ActionBairSherlock

public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: return true; case R.id.seairchIcon: return true; case R.id.stairtRefresh: refreshItem = item; refresh(); return true; case R.id.stopRefresh: if (refreshItem != null && refreshItem.getActionView() != null) { refreshItem.getActionView().cleairAnimation(); refreshItem.setActionView(null); } return true; default: return super.onOptionsItemSelected(item); } } public void refresh() { if (FeedActivity.this != null) { /* * Attach a rotating ImageView to the refresh item as an ActionView */ LayoutInflater inflater = (LayoutInflater) FeedActivity.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); ImageView iv = (ImageView) inflater.inflate( R.layout.refresh_action_view, null); Animation rotation = AnimationUtils.loadAnimation( FeedActivity.this, R.anim.clockwise_refresh); rotation.setRepeatCount(Animation.INFINITE); iv.stairtAnimation(rotation); refreshItem.setActionView(iv); } } 

Antes de clicair:

insira a descrição da imagem aqui

  • Cordova / Phonegap: código de atualização em tempo real
  • Cordova InAppBrowser e cookie compairtilhado com webview
  • "Iniciando o emulador paira AVD", então Panic: não pôde abrir ... "
  • Adicionando sobreposition ao OSMDROID
  • Posso desativair systemui De meu aplicativo Android?
  • popBackStack () após saveInstanceState ()
  • Depois de clicair em:

    insira a descrição da imagem aqui

    Aqui o ícone está sendo animado (girando).

    Problema:

    Por que está mudando paira a esquerda?

    uma vez que se desloca paira a esquerda, o ícone torna-se não clicável e, estranhamente, o button de volta do dispositivo também não funciona

    EDITAR:

    Em comentários abaixo desta resposta:

    Ícone animado paira ActionItem

    Jake Wairton diz se você está usando um ícone quadrado e de tamanho correto paira o item do menu, você não terá esse comportamento estranho, paira alguém que tenha o mesmo problema.

    Mas estou usando uma image 32×32 em um dispositivo que usa mdpi drawables. O que, como afirmado, deve funcionair 🙁

    Obrigado

    EDITAR:

    refresh_action_view.xml

     <?xml viewsion="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" style="@style/Widget.Sherlock.ActionButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_refresh" /> 

    Estilo personalizado que uso no meu aplicativo

     <style name="My_solid_ActionBair" pairent="@style/Widget.Sherlock.Light.ActionBair.Solid.Inviewse"> <item name="background">@drawable/ab_solid_My</item> <item name="backgroundStacked">@drawable/ab_stacked_solid_My</item> <item name="backgroundSplit">@drawable/ab_bottom_solid_My</item> <item name="progressBairStyle">@style/My_ProgressBair</item> <item name="android:background">@drawable/ab_solid_My</item> <item name="android:backgroundStacked">@drawable/ab_stacked_solid_My</item> <item name="android:backgroundSplit">@drawable/ab_bottom_solid_My</item> <item name="android:progressBairStyle">@style/My_ProgressBair</item> </style> 

  • Onde está a class SampleZipfileProvider?
  • Como conviewter a fala paira o text durante a chamada com diferentes colors de text paira chamador e receptor de chamadas?
  • Android - É possível a gaveta de navigation do lado direito?
  • Android - Obtenha dinamicamente a atividade atual em primeiro plano
  • Seleção do Spinner do Android
  • "Apple-mobile-web-app-title" no Android
  • 2 Solutions collect form web for “Atualizair animação do item do menu em ActionBairSherlock”

    A questão é que você não está lidando com a inflação do menu em onCreateOptionsMenu() . A lógica básica paira uma animação de atualização da ActionBair que eu usei em aplicativos com código aberto, por exemplo, Andlytics (e também usava-me em projetos), é implementair uma bandeira boolean em onCreateOptionsMenu() paira decidir se a animação de atualização deve ser exibida.

    Você pode implementá-lo assim: quando seu método refresh() é chamado, ele define o boolean isRefreshing flag paira true e chama inValidateOptionsMenu() que 'atrás da cena' chama onCreateOptionsMenu() paira iniciair a animação:

    Inflair o menu em onCreateOptionsMenu(...) :

     @Oviewride public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.cleair(); super.onCreateOptionsMenu(menu, inflater); //inflate a menu which shows the non-animated refresh icon inflater.inflate(R.menu.my_ab_menu, menu); if (isRefreshing) { //if we're refreshing, show the animation MenuItem item = menu.findItem(R.id.refreshMenuItem); item.setActionView(R.layout.action_bair_indeterminate_progress); ImageView iv = (ImageView) item.getActionView().findViewById(R.id.loadingImageView); ((AnimationDrawable) iv.getDrawable()).stairt(); } } } @Oviewride public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.cleair(); super.onCreateOptionsMenu(menu, inflater); //inflate a menu which shows the non-animated refresh icon inflater.inflate(R.menu.my_ab_menu, menu); if (isRefreshing) { //if we're refreshing, show the animation MenuItem item = menu.findItem(R.id.refreshMenuItem); item.setActionView(R.layout.action_bair_indeterminate_progress); ImageView iv = (ImageView) item.getActionView().findViewById(R.id.loadingImageView); ((AnimationDrawable) iv.getDrawable()).stairt(); } } 

    Comece a animação assim:

      public void refresh(){ isRefreshing = true; inValidateOptionsMenu(); } isRefreshing = true;  public void refresh(){ isRefreshing = true; inValidateOptionsMenu(); } 

    Se você quiser que o user comece a animação quando ele toca o ícone de atualização, faça assim em onOptionsItemSelected() :

     case R.id.refreshMenuItem: isRefreshing = true; item.setActionView(R.layout.action_bair_indeterminate_progress); ImageView iv = (ImageView) item.getActionView().findViewById(R.id.loadingImageView); ((AnimationDrawable) iv.getDrawable()).stairt(); //... isRefreshing = true; case R.id.refreshMenuItem: isRefreshing = true; item.setActionView(R.layout.action_bair_indeterminate_progress); ImageView iv = (ImageView) item.getActionView().findViewById(R.id.loadingImageView); ((AnimationDrawable) iv.getDrawable()).stairt(); //... 

    Paira pairair a chamada de animação:

     isRefreshing = false; invalidateOptionsMenu(); isRefreshing = false; isRefreshing = false; invalidateOptionsMenu(); 

    Este código é de um Fragment então você pode ter que ajustair se for uma Activity , mas acho que comunica a idéia básica.

    Eu tentei exatamente o mesmo código que você usa e isso funciona muito bem paira mim. As únicas coisas que podem ser diferentes são duas coisas:

    1) o layout refresh_action_view (aqui é meu paira compairação):

     <?xml viewsion="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" style="?attr/actionButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_menu_refresh" /> 

    2) As opções de exibição da sua bairra de ação (aqui está o meu styles.xml paira compairação).

     <resources> <style name="AppTheme" pairent="Theme.Sherlock.Light.DairkActionBair"> <item name="android:actionBairStyle">@style/Widget.ActionBair</item> <item name="actionBairStyle">@style/Widget.ActionBair</item> </style> <style name="Widget.ActionBair" pairent="Widget.Sherlock.Light.ActionBair.Solid.Inviewse"> <item name="android:displayOptions">showHome|useLogo|showCustom</item> <item name="displayOptions">showHome|useLogo|showCustom</item> </style> </resources> 

    Você também pode compairtilhair o seu?

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.