2010-07-29 18 views
32

Animasyon destekleyen bir widget yaratmaya çalışıyorum, ideal olarak android.view.animation çerçevesi aracılığıyla, arka plan hizmetinden tetiklenen koddaki uzak görünümlerdeki özellikleri ayarlayarak.Android homescreen widgeti animasyonları

Bu yaklaşımlardan herhangi biri ile ilgili herhangi bir deneyimi var mı, ya da yapmaya çalıştığım şey mi, yoksa kör bir yola mı gidiyorum?

+0

tatmin etmek zordur - en kaliteli animasyon,

eksileri arka plandan kontrol edilebilir Şimdiye kadar yapmış olsanız, çözümünüzü burada paylaşırsanız güzel olur. – Bachi

+1

Elbette - yazmak için zaman bulmaya çalışacağım. Temel olarak, hile, ilk animasyonların yerleşik olduğu düzenleri tanımlamak, ardından animasyonlar gerektiğinde bu düzenleri belirlemektir. IIRC'yi, animasyonu tetiklemek için yeni bir düzenine geçmeniz gerekir, böylece aynı animasyona sahip birden çok düzende ve bunların arasında dönüşümlü olabilirsiniz. Animasyon tamamlandıktan sonra widget'in animasyonlu olmayan bir sürümüne geçmek için bir zamanlayıcı ayarlamak da yararlıdır; aksi takdirde ana ekrana dönmek animasyonu tekrar tetikleyebilir. – Adrian

+0

hangisini arka plan hizmeti, düzen veya animasyon ile kontrol etmek istiyorsunuz? Soruyu detaylı olarak açıklayabilir misiniz? – MoiTempete

cevap

12

Bu RemoteView'in widget'lar hareketlendirmek için aslında mümkün kullanmadan gerçekten büyük şeyler yazmak Imposiible bu. Sorun, bir sistem işleminde özel kod çalıştırmanın güvenlik sonuçları nedeniyle tasarım gereği süper kısıtlayıcı olmasıdır.

Bununla demek istediğim, Android'in xml aracılığıyla yalnızca düzenlere bağlı res/anim xml dosyalarında ifade edilen animasyonlarla çalışacağıdır. Bazı RemoteView widget'ları bu

'u destekler. Bunun bir örneği, stok android sisteminde gelen News and Weather uygulaması widget'idir. Her 10 saniyede bir her bir haber hikayesinde dolaşmak için bir ViewFlipper kullanıyor.

<ViewFlipper android:layout_width="match_parent" android:layout_height="wrap_content" android:measureAllChildren="true" android:flipInterval="10000" android:autoStart="true" 
android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" android:animateFirstView="true"> 
     <TextView android:id="@+id/Description1TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description2TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description3TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description4TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
    </ViewFlipper> 

Bu örnekte bekleyen amaçlarınızı her bir TextView'e bağlayabilirsiniz. Bir kullanıcı herhangi birini tıkladığında farklı bir eylem gerçekleşebilir.

Son olarak, Android her sürümde animasyonlu görünümler için yavaş yavaş destek ekliyor. Örneğin, TransitionDrawables (çapraz geçiş seçici seçilebilir) Android 3.0'a kadar çapraz solmaz.

2

yapabilirsiniz Widget üzerinde fadeIn veya fadeOut gibi sadece basit animasyonlar var, bu çok basit, herhangi bir düzen animasyonları gerekmez, sadece ViewFlipper kullanın (o kadar kolay olduğunu öğrenmek için araştırma 3 gün sürdü).

Oysa özel rampalarını

2

Bu, ancak varsayılan ana ekran uygulamasında çok ağır olduğundan ve çok sık kullanmamanız gerektiğinden, dikkatle kullanın. Mario Coin Block widget yılında

, ben animasyon yapmak için böyle bir teknik kullanıyorum, kaynak kodunu kontrol edebilirsin: http://code.google.com/p/mario-coin-block/source/browse/trunk/MarioWidget.CoinBlock/src/com/gueei/mario/coinBlock/view/CoinBlockView.java

Temelde fikir manuel olarak ekran dışında Bitmap üzerine çizmek olduğunu ve bu RemoveViews kullanarak BitmapView en bitmapi değiştirmek Aramak.

1

Diğer yanıtlara burada katılıyorum, bu yüzden yeniden yinelemem - bir widget üzerinde sınırlı animasyon mümkündür, ancak kaynaklar üzerinde yoğun olabilir, ana ekranı yavaşlatır ve daha az yanıt verebilir ve pil süzgecini yapabilir. Benim deneyimimden - düzgün çalışmıyor. Yani alt çizgi -. O zaman zaman değişen sadece birkaç kare ise tamam veya hizmetten örnek kullanıcı basın için bir olayın üzerine nadiren bazı etkileri (veya bazı etkinlik için

Ama burada muhtemelen bir fikir doğrudan sorunuzu cevaplamıyor, ancak uygun bir alternatif olabilir (kullanım durumunuzu bilmiyorum, hiç alakalı olmayabilir) Canlı bir duvar kağıdı uyguladığınızı düşündünüz mü?

artıları - ... interaktif değil, kullanıcının duvar kağıdı yerine geçer ve aynı içine bakıyor herkesin tadı

İlgili konular