【Google Play Servicesを使って効率的に開発をする】com.google.android.gms.common.imagesを使う

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

com.google.android.gms.common.imagesにはGoogle Play servicesから取得した画像を読み込むクラスが定義されています。

ImageManagerとは

ImageManagerは画像リソースやネットワーク上の画像を読み込み、ImageViewに表示してくれるクラスです。
ネットワーク上の画像はUriで指定できます。 しかし、このUriは任意の物ではなく、Google Play Servicesから取得したUriでなくてはいけません。

ImageManagerの使い方

まずはImageManagerをインスタンス化します、インスタンス化するにはImageManager#createを使用します。
public static ImageManager create (Context context)
Context context コンテキスト
次に、読み込む画像を指定します。
画像の指定にはImageManager#loadImageを使用します、このメソッドには幾つかのオーバーロードがあるので、状況に合わせて使い分けを行いましょう。

ImageManager#loadImage(ImageView imageView, int resId)

画像リソースIDで指定した画像をImageViewにロードします。
public void loadImage (ImageView imageView, int resId)
ImageView imageView 読み込んだ画像がセットされるImageViewです。
int resId ロードする画像リソースID

ImageManager#loadImage(ImageView imageView, Uri uri)

Uriで指定した画像をImageViewにロードします。
public void loadImage (ImageView imageView, Uri uri)
ImageView imageView 読み込んだ画像がセットされるImageViewです。
Uri uri ロードする画像のUri、他のGooglePlayServices経由で取得したものに限ります。

ImageManager#loadImage(ImageView imageView, Uri uri, int defaultResId)

Uriで指定した画像をImageViewにロードします。画像が取得できない場合は、画像リソースIDで指定した画像をImageViewにロードします。
public void loadImage (ImageView imageView, Uri uri, int defaultResId)
ImageView imageView 読み込んだ画像がセットされるImageViewです。
Uri uri ロードする画像のUri、他のGooglePlayServices経由で取得したものに限ります。
int defaultResId uriで指定した画像がロードできなかった場合に表示されるデフォルト画像リソースIDを指定します。

ImageManager#loadImage(ImageManager.OnImageLoadedListener listener, Uri uri)

Uriで指定した画像をロードします。ロードの完了はImageManager.OnImageLoadedListenerを使ってコールバックされます。
public void loadImage (ImageManager.OnImageLoadedListener listener, Uri uri)
ImageManager.OnImageLoadedListener listener 画像のロードが完了した時のコールバックインターフェースを指定します
Uri uri ロードする画像のUri、他のGooglePlayServices経由で取得したものに限ります。

ImageManagerloadImage(ImageManager.OnImageLoadedListener listener, Uri uri, int defaultResId)

Uriで指定した画像をロードします。ロードの完了はImageManager.OnImageLoadedListenerを使ってコールバックされます。 画像が取得できない場合は、画像リソースIDで指定した画像がロードされます。
public void loadImage (ImageManager.OnImageLoadedListener listener, Uri uri, int defaultResId)
ImageManager.OnImageLoadedListener listener 画像のロードが完了した時のコールバックインターフェースを指定します
Uri uri ロードする画像のUri、他のGooglePlayServices経由で取得したものに限ります。
int defaultResId uriで指定した画像がロードできなかった場合に表示されるデフォルト画像リソースIDを指定します。

ImageManager.OnImageLoadedListenerの使い方

ImageManager.OnImageLoadedListenerは画像のロード完了を受け取るコールバックインターフェースです。
public abstract void onImageLoaded (Uri uri, Drawable drawable, boolean isRequestedDrawable)
Uri uri ロードに使用したUri。
Drawable drawable ロードした画像を表すDrawableインスタンス
boolean isRequestedDrawable URIからロードした場合はTrue、それ以外はFalseになります。

Sizeの使い方

Sizeは幅と高さを表すイミュータブルクラスです。 調査中です。

WebImageの使い方

WebImageはWebサーバーに配置されている画像を表すクラスです。 調査中です。

Uriが取得できるGoogle Play servicesとは

調査中です。

サンプルプログラム

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="yona.trygms.ImageManagerActivity">

    <Button
        android:id="@+id/button_1"
        android:text="loadImage (ImageView imageView, int resId)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button_2"
        android:text="loadImage (ImageView imageView, Uri uri)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button_3"
        android:text="loadImage (ImageView imageView, Uri uri, int defaultResId)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button_4"
        android:text="loadImage (ImageManager.OnImageLoadedListener listener, Uri uri)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button_5"
        android:text="loadImage (ImageManager.OnImageLoadedListener listener, Uri uri, int defaultResId)"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
package yona.trygms;

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import com.google.android.gms.common.images.ImageManager;
import com.google.android.gms.common.images.Size;
import com.google.android.gms.common.images.WebImage;

public class ImageManagerActivity extends Activity {

    private ImageManager mImageManager;

    private ImageView mImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_manager);
        mImageManager = ImageManager.create(this);
        mImageView = (ImageView) findViewById(R.id.imageview);

        findViewById(R.id.button_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mImageManager.loadImage(mImageView , R.mipmap.ic_launcher);
            }
        });
        findViewById(R.id.button_2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("http://yonayona.biz/yonayona/wp-content/uploads/2017/03/android-1693894_640.jpg");
                WebImage webImage = new WebImage(uri);
                Size size = new Size(100 , 100);
                mImageManager.loadImage(mImageView , webImage.getUrl());
            }
        });
        findViewById(R.id.button_3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("http://yonayona.biz/yonayona/wp-content/uploads/2017/03/android-1693894_640.jpg");
                mImageManager.loadImage(mImageView , uri ,R.mipmap.ic_launcher);
            }
        });
        findViewById(R.id.button_4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("http://yonayona.biz/yonayona/wp-content/uploads/2017/03/android-1693894_640.jpg");
                mImageManager.loadImage(new ImageManager.OnImageLoadedListener() {
                    @Override
                    public void onImageLoaded(Uri uri, Drawable drawable, boolean b) {
                    }
                } , uri);
            }
        });
        findViewById(R.id.button_5).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Uri uri = Uri.parse("http://yonayona.biz/yonayona/wp-content/uploads/2017/03/android-1693894_640.jpg");
                mImageManager.loadImage(new ImageManager.OnImageLoadedListener() {
                    @Override
                    public void onImageLoaded(Uri uri, Drawable drawable, boolean b) {

                    }
                } , uri, R.mipmap.ic_launcher) ;
            }
        });
        Uri uri = new Uri.Builder().build();
        WebImage webImage = new WebImage(uri);
        Size size = new Size(100,100);
    }
}