13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Android]画像読み込みライブラリのGlide使ってみた

Posted at

はじめに

業務でAndroidアプリ上でjpegやgifなどを表示させることになって、いろいろ調べて実際に使用した方法を振り返りとしてまとめてみました。
今回は自前コードを減らして作成したかったので、Glideというライブラリを紹介しながら進めていきます。

Glide

今回は画像をネットワーク上から簡単に取得できるライブラリであるGlideを使用してみました。
同様なライブラリとしてPiccasoなどがありますが、こちらはgif未対応でした。

Glideの使用方法

まず、bulde.gradleに依存関係を記述します。

build.gradle
dependencies {
    implementation 'com.github.bumptech.glide:glide:4.4.0'
}

また、ネットワーク上の画像を読み込んで来るため、忘れないようにAndroidManifest.xmlの記述も行っておきます。
これ忘れてしまうと、ネットワークから画像を取得できなかったです。

AndroidManifest.xml
 
<uses-permission android:name="android.permission.INTERNET"/>

レイアウトファイルの準備を行います。
Glideで読み込む画像のレイアウトとして、レイアウトファイルにImageViewを作成します。

test_layout.xml
<ImageView
    android:id="@+id/test_glide_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

あとは、ActivityなどでGlideを利用して画像取得先の指定などを実装します。
自前でやろうとすると、専用のクラス作ったりしますが、Glideを使用すると非常に簡単に実装できます。

TestActivity.kt
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(findViewById(R.id.toolbar))

        // 画像取得先URL
        val testUrl: String = mPng8

        // ImageViewを取得
        val testImage: ImageView = view.findViewById(R.id.test_glide_image)

        // Glideで画像取得
        Glide.with(this)
            .load(testUrl)
            .into(testImage)
    }

Screenshot_1611795704.png

GlideApp

Glideはv4からGlideではなくGlideAppを使用するようになります。
Glideと比べてオプションの指定方法が変わり、画像を表示させる方法も拡充され、以下のようなことが可能となります。

  • アイコン(画像)を丸くする
  • 横幅の最大まで中央寄せ表示

以下の例ではアイコンを丸くする方法を記載します。
GlideAppを使用したい場合、以下の設定が必要でした。

build.gradle
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }

次に、GlideModuleアノテーションを付けたAppGlideModuleを継承するクラスを実装します。
この際、メンバー、中の実装などは不要でした。

MyAppGlideModule.kt
package com.example.glidetest

import com.bumptech.glide.annotation.GlideModule
import com.bumptech.glide.module.AppGlideModule

@GlideModule
class MyAppGlideModule: AppGlideModule() {
}

読み込みの処理も、Glideと同様Activityに実装します。

TestActivity.kt
        // GlideAppでの画像取得
        GlideApp.with(this)
            .load(testUrl)
            .into(testImage)

アイコンを丸くしたい場合は、上記の読み込み処理にcircleCrop()を追加することで画像を丸くすることができます。

TestActivity.kt
        // GlideAppでの画像取得
        GlideApp.with(this)
            .load(testUrl).circleCrop()
            .into(testImage)

Screenshot_1611797838.png

今回ハマったところ

Glideを利用するにあたり、すごくハマった点はImageViewの領域に画像が入りきらなかったことです。
ImageViewの縦横指定と画像の縦横比があっていない場合にうまく画像が表示されないことがありました。
縦横比を無視して表示したい場合は、Glideのオプションを指定するのではなく、単純にImageViewのscaleTypeの指定をfitXYにしてやることで、画像全体を縦横比無視して出せました。

おわりに

今回、初めてライブラリを使用した画像取得の処理を実装してみましたが、自前のソースを実装するのに比べてかなり実装量が減らすことができて楽でした。
他にもまだまだ機能があるようなので今後も実装を進めつつ理解を深めていきたいと思います。
また、今回はまだ一部の機能だけを利用しましたが、Glideだけでなく他のライブラリなどで便利なものなどは積極的に理解して使用できるようにしていきたいです。

13
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?