Android Kütüphaneleri – 1 – Picasso

Eskiden kütüphane ekleme sorunsalı kullanma sorunsalı hepimizde sorun olmuştur. Şahsen bende fazlasıyla oldu. Artık anladım ki kütüphane kullanmadan olmuyo arkadaş. O yüzden android ile ilgili yeni yazılar eklemeye, javada ki eksik bilgilerimi düzenlemeye devam ediyorum. İlk olarak kütüphane nedir, neler vardır sözel olarak bir yazı yayınlamaya çalışacağım. O yazının linki önümüzdeki günlerde burada paylaşmayı düşünüyorum.

Şimdi ise ilk yapacağım iş Picasso kütüphanesi Android’te ne işimize yarıyor, nerede kullanabiliriz, nasıl kullanabiliriz sorularına bu yazıda cevaplar verebilmek. Uzun bir yazı dizisi olacaktır. Sizde bu yazıyı paylaşırsanız gayet memnun olurum.

 

Android Picasso Nedir Kimdir ?

Picasso Android uygulamalarında image yüklenmesi ve işlenmesi için geliştirilmiş bir kütüphanedir. Kullanımı kolaydır. İmagelerin cache’lenmesinide sağlar.

 

Picasso bize ne avantaj sağlamaktadır, picasso’yu neden tercih etmeliyiz ?

Şimdi öncelikle picasso olmasaydı bu işlem nasıl olacaktı o soruya cevap veriyip, picasso ile işlemin nasıl olduğunu göstereceğim.. Picasso olmasaydı;

  • Görüntü URL’i alınır.
  • Görüntüyü indirmek için AsyncTask oluşturulur.
  • AsyncTask çalıştırılır.
  • Sonucu bitmap olarak saklanır.
  • Bu bitmap kaynak olarak ayarlanır.
  • Cache (Önbellek) görüntü saklanır.

Bu işlemlerden geçtikten sonra resmimize ulaşcaktık. Hadi bir örnekle anlatıyım. Şimdi Elimizde ;

/wp-content/uploads/2016/08/fg6390-770×430.png adlı bir resmin var olduğunu ve bunu uygulamada göstermek istediğinizi düşünün..

Yapmamız gerekenler üsteki gibi sıralanmış olarak koda dökersek :

import java.io.InputStream;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private ImageView downloadedImg;
    private ProgressDialog mProgressDialog;
    private String downloadUrl = "/wp-content/uploads/2016/08/fg6390-770x430.png";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button imageDownloaderBtn = (Button) findViewById(R.id.downloadButton);

        downloadedImg = (ImageView) findViewById(R.id.imageView);

        imageDownloaderBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new DownloadImage().execute(downloadUrl);
            }

        });
    }

    private class DownloadImage extends AsyncTask<String, Void, Bitmap> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(MainActivity.this);
            mProgressDialog.setTitle("Resim İndiriliyor");
            mProgressDialog.setMessage("Bekleyin...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Bitmap doInBackground(String... URL) {

            String imageURL = URL[0];

            Bitmap bitmap = null;
            try {
                // Resim indiriyoruz
                InputStream input = new java.net.URL(imageURL).openStream();
                // Decode Bitmap 
                bitmap = BitmapFactory.decodeStream(input);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
          //İndirdiğimiz resmi imgView'e atıyoruz
            downloadedImg.setImageBitmap(result);
            //Progress dialog off
            mProgressDialog.dismiss();
        }
    }
}

Evet üzerinde anlattığım uzun bir işlem ve işkence. Peki bize Picasso ne sağlıyor. İşte Picasso ile burada yapılan işlemler tek satıra iniyor.
 ImageView imgView = (ImageView) findViewById(R.id.imageView);
        Picasso.with(MainActivity.this)
                .load("/wp-content/uploads/2016/08/fg6390-770x430.png")
                .into(imgView);

Yapılan işlemler ise;

  • Görüntü URL’i alınır.
  • Tek bir satır kod ile ImageView içerisine yüklenir.

Hadi Picasso’nun kullanımına bakalım..

 

Picasso Kütüphanesi kullanımı :

build.gradle kısmına bunu eklemeniz yeterli..

 compile 'com.squareup.picasso:picasso:2.5.2'

Picasso Kütüphanesi ile ilgili Örnekler:

şimdi activity_main.xml’e bir imageView atalım..

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ImageView>

MainActivity.java’ya da ilk olarak resmi direk indirip göstermemiz için gerekli kodumuzu yazalım..
 ImageView imgView = (ImageView) findViewById(R.id.imageView);
        Picasso.with(MainActivity.this)
                .load("/wp-content/uploads/2016/08/fg6390-770x430.png")
                .into(imgView);

!!!!—> İnternet için manifest dosyanız’da izin vermeyi unutmayınız.. <— !!!

Uygulamanın çıktısı :

14287571_996907020406519_1400983139_n

 

Şimdi bakalım bu kütüphanede kullanabiliceğimiz başka neler varmış.. ( Bundan sonraki örneklerde çıktı olmayacaktır, deneyerek sonucu görebilirsiniz 🙂 )

Resmin Boyutlarını ayarlamak için Resize Kullanılır.. ( Resize–> Yeniden boyutlandırmak)

        Picasso.with(MainActivity.this)
                .load("/wp-content/uploads/2016/08/fg6390-770x430.png")
                .resize(150,150)
                .into(imgView);

Resmi döndürmek için Rotate methodu kullanılır..
Picasso.with(MainActivity.this)
                .load("/wp-content/uploads/2016/08/fg6390-770x430.png")
                .resize(150,150)
                .rotate(100)
                .into(imgView);

Eğer uygulamanızda uzak bir kaynaktan bir görsel indirecekseniz ve indirme işlemi sonuçlanana kadar bir görsel kullanmak isterseniz placeholder metodunu kullanabilirsiniz.
   Picasso.with(MainActivity.this)
                .load("/wp-content/uploads/2016/08/fg6390-770x430.png")
                .placeholder(R.drawable.loading)
                .into(imgView);

Eğer uygulama’da resim yüklenmedi ve bir hata resmi göstermek istiyorsanız error methodu kullanılır. Error ve place holder birlikte kullanılabilmektedir.

 

   Picasso.with(MainActivity.this)
                .load("/wp-content/uploads/2016/08/fg6390-770x430.png")
                .error(R.drawable.error)
                .into(imgView);

GridView haliyle güzel bir örnek için //stacktips.com/tutorials/android/download-and-display-image-in-android-gridview sitesinide inceliyebilirsiniz..

 

Kaynaklar :

//square.github.io/picasso/

//blog.iamkaan.com/category/android-kutuphaneleri/

//blog.gokhanyavas.com/ucuncu-parti-android-kutuphaneleri/

//gelecegiyazanlar.turkcell.com.tr/blog/her-android-gelistiricisinin-kullanmasi-gereken-5-kutuphane

//stacktips.com/tutorials/android/how-to-use-picasso-library-in-android

 

3 thoughts on “Android Kütüphaneleri – 1 – Picasso

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir