29 Aralık 2015 Salı

Android GifView

Öncelikli github linkini vereyim sonra biraz açıklamaya çalışayım. 
https://github.com/Cutta/GifView

Android için gif oynatmanın bir kaç yolu mevcut ancak en sağlıklı bulduğum bu yöntemi biraz sadeleştirerek sunmak istedim. Bu yöntemde gif lerimizi androidin bize sağladığı Movie class ının yardımıyla oynatacağız.
GifView.java classından biraz bahsetmem gerekirse. Asıl işin burada döndüğünü kodlara bakınca da anlayacaksınız. Gif oynatma, durdurma, kaynağını belirleme, boyutlandırma gibi işlemlerin hepsi bu sınıfta meydana geliyor.Bu sınıf ise View classından extend ediliyor.
 Gifleri frame frame gösterebilmek için çalıştığımız class ise yine androidin bize sunduğu  Canvas classı. Aslında yaptığımız şey Movie classına gifin her sahnesini canvas vasıtası ile iletmek ve oluşan görüntüyü View classından extend ettiğimiz için override edebildiğimiz onDraw metodunda  "al bunu göster" diyebilek olarak özetlenebilir.
Umarım işinize yarar.




17 Aralık 2015 Perşembe

Android EventBus Nedir?


       EventBus proje içerisinde olayları(event) rahatlıkla yakalayabilmemiz için geliştirilmiş bir kütüphane.
        Fragment, Activity, Thread, Service vb sınıflar arasında kolayca parametre akışı sağlamamıza yardımcı olur. Eski usül yöntem ile, Java' nın bize sağladığı interface ile bunu yapmak mümkün evet. Yani bir fragmentte tetiklenen bir olay başka bi event ya da activityde interface'ı implement ettiğimiz taktirde yakalanabilir. Ancak bunun olumsuz yanı kodu okunabilirlikten çok uzak kılıyor ve yeni bir şeyler yapmak istediğinizde iş gerçekten karışıyor. Böyle düşünen yalnızca ben değilmişim ki 7 bin üzerinde star alan GreenRobot EventBus  kütüphanesi ve tabi ki olmazsa olmaz Square şirketinin Otto kütüphanesi epey popüler.
        Kullanım açısından ikisi neredeyse aynı diyebiliriz ancak aşağıdaki karşılaştırma tablosunun bize söyleyecekleri var :)
                       

        Kullanımından da biraz bahsedecek olursam.
        Her olaya özgü Event classları oluşturuyoruz. Bu classları özel kılan bi durum yok. Normal değişkenler ve setter getter methodları olan bir class düşünebiliriz.
        Olayın meydana geldiği fragment ya da activity de olayın meydana geldiğini tek satırda söylüyoruz.

   EventBus.getDefault().post(new ActivityEvent("Event sent by MainActivity"));

        Bu satırda anlatılmak istenen gelinen satırda ActivityEvent olayının meydana geldiği.
        Bu olayı başka bi sınıfta yakalamak istiyorsak öncelikle olayları yakalamak istediğimizi söylüyoruz. Yani register işlemi. Bu işlemi fragment, activity ya da service sınıflarında onCreate methodlarında yerine getiriyoruz. Bu işlem de yalnızca tek satır.

  EventBus.getDefault().register(this);

        Aynı şekilde işimizin bittiğini ve artık olaylardan haberdar olmak istemediğimizi de söylememiz gerekiyor. Bunu da onDestroy methodunda yerine getiriyoruz.
@Overrideprotected void onDestroy() {
    EventBus.getDefault().unregister(this);    super.onDestroy();}
        Şimdi gelelim olayı yakaladığımız yere. Bunun için olayı yakalamak istediğimiz yerde onEvent adlı methodlar oluşturmamız gerekiyor ve bu methodlara hangi olaylarla ilgileniyorsak onu parametre olarak vermemiz gerekiyor. Yani birden fazla olaylı yakalayabiliriz.
public void onEvent(ActivityEvent event) {

    ...
}
        Kullanımı gerçekten çok çok kolay.
        Buradaki anlatım eksik ya da karışık gelmiş olabilir. Örnek proje Github' da mevcut. Oradan clonelayıp inceleyebilirsiniz.
        https://github.com/Cutta/EventBusSample
        Kolay gelsin.