Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Glide 4 with Kotlin
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroyuki Kusu
April 19, 2018
Programming
2.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Glide 4 with Kotlin
Hiroyuki Kusu
April 19, 2018
More Decks by Hiroyuki Kusu
See All by Hiroyuki Kusu
モノレポのプルリクエストに最近、導入したもの
hkusu
2
590
GitHub composite actions
hkusu
2
440
Android の静的解析における SARIF ファイルの活用
hkusu
0
5.6k
CI_でライブラリのバージョンの変化をレポートする.pdf
hkusu
0
420
Maestro を GitHub Actions で動かす 〜Android編〜
hkusu
1
1.8k
Android の CI(GitHub Actions)の改善で、最近やったこと
hkusu
0
730
Tauri Mobile で生成される Android のコードを見てみる
hkusu
0
1.6k
Custom GitHub Actions を作って Organization 内で共有する
hkusu
1
600
GitHub Actions でユニットテストの結果をレポートする
hkusu
0
3.9k
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
630
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
Performance Engineering for Everyone
elenatanasoiu
0
250
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
140
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
420
スマートグラスで並列バイブコーディング
hyshu
0
270
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
110
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
190
A2UI という光を覗いてみる
satohjohn
1
170
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
220
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
240
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
エンジニアに許された特別な時間の終わり
watany
107
250k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
270
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
BBQ
matthewcrist
89
10k
How to make the Groovebox
asonas
2
2.3k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
New Earth Scene 8
popppiees
3
2.4k
Transcript
Glide 4 with Kotlin Hiroyuki Kusu (@hkusu_) 2018/4/19 potatotips #50
None
Image loading library for Android Vector ܗࣜͷը૾औΓѻ͑Δ
͞ͳ͍͜ͱ Glide 4 ͷಋೖํ๏ Glide 3 ͔Β 4 ͷҠߦͷํ๏ ύϑΥʔϚϯεɾΩϟογϡઓུͳͲ
Glide Module @GlideModule class MyGlideModule : AppGlideModule() { override fun
applyOptions(context: Context, builder: GlideBuilder) { // GlideશମͷઃఆΛهड़ } override fun registerComponents(context: Context, glide: Glide, registry: Registry) { // Component(ྫ:OkHttpμϯϩʔυ)ͷઃఆొͳͲΛهड़ } } GlideApp.with(context) .load(url) .into(imageView) #BTJD6TBHF (MJEF"QQBOOPUBUJPOQSPDFTTPSͰੜ͑Δ
Transformation • ԁܗΫϩοϓɾؙ֯ Glide 4 Ͱඪ४Ͱ༻ҙ͞Ε͍ͯΔ • ෳͷ Transformation Λಉ࣌ʹద༻͢Δ͜ͱՄ
GlideApp.with(context) .load(url) .transforms( CenterCrop(), RoundedCorners( resources.getDimensionPixelSize(R.dimen.something_radius) ) ) .into(imageView)
Glide Transformations #SJHIUOFTT'JMUFS #MVS
Transition // ϑΣʔυ .transition(DrawableTransitionOptions.withCrossFade()) // Ξχϝʔγϣϯ .transition(DrawableTransitionOptions().transition { view ->
view.scaleX = 0F view.scaleY = 0F view.animate() .scaleX(1.0f) .scaleY(1.0f) .setDuration(300) .setInterpolator(FastOutSlowInInterpolator()) }) // or .transition(DrawableTransitionOptions().transition(R.anim.show)) Glide 4 Glide 3 ͱҧ͍ɺσϑΥϧτͰϑΣʔυͳ͠ͳͷͰҙ
Glide Option (in Glide Extension) @GlideExtension object GlideExtension { @GlideOption
@JvmStatic @NonNull fun roundedCornersCrop( options: RequestOptions, context: Context ): RequestOptions { val radius = context .resources .getDimensionPixelSize(R.dimen.something_radius) return options.transforms(CenterCrop(), RoundedCorners(radius)) } } Glide Extension Java Ͱ Public ίϯελϥΫλͳ͠ˍΦϓγϣϯ ฦΓ͕NonNull ͳ static ϝιουͰ࡞͢Δඞཁ͕͋Δ ˡୈҰҾ 3FRVFTU0QUJPOT ඞͣඞཁ Α͘͏ΦϓγϣϯΛఆٛͯ͠࠶ར༻
GlideApp.with(context) .load(url) .roundedCornersCrop(context) .into(imageView) (MJEF0QUJPOͰఆٛͨ͠Φϓγϣϯͷར༻ annotation processor Ͱϝιου͕ੜ͑ͯΔ
@GlideExtension object GlideExtension { @GlideOption @JvmStatic @NonNull fun override( options:
RequestOptions, layoutParams: ViewGroup.LayoutParams ): RequestOptions { val width = layoutParams.width val height = layoutParams.height return options.override(width, height) } } GlideApp.with(context) .load(url) .override(imageView.layoutParams) .into(imageView)
• Transition αϜωΠϧɾϦεφʔͷઃఆͳͲ Glide Option Ͱఆ ٛͰ͖ͳ͍ • Glide
Type ͱͯ͠ఆٛͰ͖Δ੍͕͕͋Δ • Ұͷը૾ಡΈࠐΈͰࢦఆͰ͖Δ Glide Type 1ͭͷΈ • ҾΛ͢͜ͱ͕Ͱ͖ͳ͍ • ϦιʔεΞΫηεͷҝͷ Context ઃఆͨ͘͠ͳΔ
Kotlin Extension Functions Λ͔ͭ͏
// ϑΣʔυ fun GlideRequest<Drawable>.withCrossFade(duration: Int = 300) = transition(DrawableTransitionOptions.withCrossFade(duration)) //
Ξχϝʔγϣϯ fun GlideRequest<Drawable>.withShowAnimation(duration: Long = 300, interpolator: Interpolator = LinearInterpolator()) = transition(DrawableTransitionOptions().transition { view -> view.scaleX = 0F view.scaleY = 0F view.animate() .scaleX(1.0f) .scaleY(1.0f) .setDuration(duration) .setInterpolator(interpolator) }) // ϑΣʔυ GlideApp.with(context) .load(url) .withCrossFade(duration = 600) .into(imageView) // Ξχϝʔγϣϯ GlideApp.with(context) .load(url) .withShowAnimation(interpolator = FastOutSlowInInterpolator()) .into(imageView)
ࢀߟϦϯΫ Glide 4 ͷಋೖํ๏ GitHub ϦϙδτϦ https://github.com/bumptech/glide ެࣜυΩϡϝϯτ https://bumptech.github.io/glide/ Glide
3 ͔Β 4 ͷҠߦͷํ๏ Migrate Glide v3 to v4 (Qiita) https://qiita.com/ronnnnn/items/9d82130985b5f1f6b77e Migrating from v3 to v4 (ެࣜυΩϡϝϯτ) https://bumptech.github.io/glide/doc/migrating.html
Thank you ! @hkusu_
ิεϥΠυ
GlideApp.with(context) .load(url) .circleCrop() .into(imageView)
GlideApp.with(context) .load(url) .transform( RoundedCorners( resources.getDimensionPixelSize(R.dimen.something_radius) ) ) .into(imageView) ̐ͭͷ֯ʹର͢Δؙ֯ͷద༻Λݸผʹ੍ޚ(ྫ:ӈ্ͷΈؙ֯)͢Δ߹
Glide Transformations ͷ RoundedCornersTransformation Λར༻
ϓϨʔεϗϧμͱϑΣʔυΛಉ࣌ʹద༻͢Δ ͱϓϨʔεϗϧμ͕ফ͑ͳ͍ .transition(DrawableTransitionOptions.withCrossFade()) .transition( DrawableTransitionOptions() .crossFade( DrawableCrossFadeFactory .Builder() .setCrossFadeEnabled(true) .build()
) ) ରࡦ
@GlideModule class GlideModule : AppGlideModule() { override fun applyOptions(context: Context,
builder: GlideBuilder) { builder.setDefaultTransitionOptions( Drawable::class.java, DrawableTransitionOptions() .crossFade( DrawableCrossFadeFactory .Builder() .setCrossFadeEnabled(true) .build() ) ) } } શը૾ϦΫΤετʹϑΣʔυΛద༻͔ͭରࡦίʔυΛಋೖ ϓϨʔεϗϧμͱϑΣʔυΛಉ࣌ʹద༻͢Δ ͱϓϨʔεϗϧμ͕ফ͑ͳ͍