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
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
110
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
330
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
150
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
500
ALB ログから Trace を気合で繋げる技術
fohte
7
860
自分的「カンファレンスの楽しみ方」
syumai
0
190
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
340
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
540
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Design in an AI World
tapps
1
300
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
330
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
310
WCS-LA-2024
lcolladotor
0
820
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Building the Perfect Custom Keyboard
takai
2
860
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
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() ) ) } } શը૾ϦΫΤετʹϑΣʔυΛద༻͔ͭରࡦίʔυΛಋೖ ϓϨʔεϗϧμͱϑΣʔυΛಉ࣌ʹద༻͢Δ ͱϓϨʔεϗϧμ͕ফ͑ͳ͍