SORU
16 Mart 2012, Cuma


Actionİtem için animasyonlu Simgesi

Her yerde benim sorunum için uygun bir çözüm arıyorum ve henüz bulamadım. Bir ActionBar (ActionBarSherlock) XML dosyasından şişirilmiş ve menü bir öğe içeren ve öğe Actionİtem olarak gösterilen bir Menü VAR.

menü:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    
    <item
        android:id="@ id/menu_refresh"       
        android:icon="@drawable/ic_menu_refresh"
        android:showAsAction="ifRoom"
        android:title="Refresh"/>    
</menu>

etkinlik:

[...]
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.mymenu, menu);
    return true;
  }
[...]

Bu Actionİtem bir kullanıcı Actionİtem tıkladığında simge ve metin ile birlikte görüntülenir, simgesi, daha spesifik olarak, yerde dönen animasyon başlamak istiyorum. Söz konusu yenileme simgesi simgesi.

Ben de fark ettim ActionBar var destek için kullanarak özel görünümler (Adding an Action View) ancak bu özel görünüm genişletilmiş kapak tüm bölgenin ActionBar ve aslında blok dışında her şey app simgesi, benim davam değil, ne arıyordum.

Yani benim bir sonraki girişimi oldu tarayın AnimationDrawable ve tanımlamak benim animasyonu Kare-Kare, set drawable olarak simge için Menü öğesi, ve sonra onOptionsItemSelected(MenuItem item) simge ve başlar kullanarak animasyon ((AnimationDrawable)item.getIcon()).start(). Bu ancak başarısız oldu. Herkes bu etkiyi başarmak için herhangi bir yol biliyor mu?

CEVAP
16 Mart 2012, Cuma


Doğru yoldasın. GitHub Göstergeli.es uygulama uygulama olacaktır.

İlk animasyon XML tanımlayın:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1000"
    android:interpolator="@android:anim/linear_interpolator" />

Şimdi eylem görüntülemek için yerleşimi

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_action_refresh"
    style="@style/Widget.Sherlock.ActionButton" />

Tek yapmamız gereken öğeye tıklandığı zaman bu görünümü etkinleştir

 public void refresh() {
     /* Attach a rotating ImageView to the refresh item as an ActionView */
     LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);

     Animation rotation = AnimationUtils.loadAnimation(getActivity(), R.anim.clockwise_refresh);
     rotation.setRepeatCount(Animation.INFINITE);
     iv.startAnimation(rotation);

     refreshItem.setActionView(iv);

     //TODO trigger loading
 }

Yükleme bittiğinde, sadece animasyon durdurmak ve manzara çok net:

public void completeRefresh() {
    refreshItem.getActionView().clearAnimation();
    refreshItem.setActionView(null);
}

Ve bitirdiniz!

Bazı ek şeyler yapmak için:

  • Önbellek eylem görünüm düzeni enflasyon ve animasyon enflasyon. Sadece bir kez yapmak istiyorum ne kadar yavaşlar.
  • completeRefresh() 14 *Çek ekleyin

Bu uygulama üzerine çekme isteği burada: https://github.com/github/gauges-android/pull/13/files

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mindy

    Mindy

    20 NİSAN 2006
  • New Scientist

    New Scientis

    27 Kasım 2006
  • Chaîne de TheMoustic

    Chaîne de T

    5 Kasım 2006