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
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
600
GitHub composite actions
hkusu
2
460
Android の静的解析における SARIF ファイルの活用
hkusu
0
5.7k
CI_でライブラリのバージョンの変化をレポートする.pdf
hkusu
0
430
Maestro を GitHub Actions で動かす 〜Android編〜
hkusu
1
1.8k
Android の CI(GitHub Actions)の改善で、最近やったこと
hkusu
0
740
Tauri Mobile で生成される Android のコードを見てみる
hkusu
0
1.6k
Custom GitHub Actions を作って Organization 内で共有する
hkusu
1
610
GitHub Actions でユニットテストの結果をレポートする
hkusu
0
3.9k
Other Decks in Programming
See All in Programming
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
100
初めての模倣学習とVLA
natsutan
0
450
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
Building an Out-of-Order CPU
latte72
0
620
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
140
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
350
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.3k
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
110
T3DD26: From RAGs to Riches
martinhelmich
0
140
Flow は今どうなっているか
mizdra
PRO
0
880
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
130
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
960
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
3.2k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Agile that works and the tools we love
rasmusluckow
331
22k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
My Coaching Mixtape
mlcsv
0
300
The Cost Of JavaScript in 2023
addyosmani
55
10k
Why Our Code Smells
bkeepers
PRO
340
58k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
490
Statistics for Hackers
jakevdp
799
230k
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() ) ) } } શը૾ϦΫΤετʹϑΣʔυΛద༻͔ͭରࡦίʔυΛಋೖ ϓϨʔεϗϧμͱϑΣʔυΛಉ࣌ʹద༻͢Δ ͱϓϨʔεϗϧμ͕ফ͑ͳ͍