Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
9-patchで画像の一部分を伸縮させる
Search
Shirataki
January 31, 2025
Programming
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
9-patchで画像の一部分を伸縮させる
Shibuya.apk#51で発表した内容です!
Shirataki
January 31, 2025
More Decks by Shirataki
See All by Shirataki
海外のアプリで見かけたかっこいいTransitionを真似てみる
shogotakasaki
1
370
Other Decks in Programming
See All in Programming
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
R8 の設定見直しでアプリサイズ削減
andpad
0
220
phperだってパンチカードでコーディングしたい
o0h
PRO
0
350
Jetpack Compose Mechanisms
skydoves
3
820
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
980
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
280
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.7k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
440
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
180
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.5k
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Documentation Writing (for coders)
carmenintech
77
5.6k
Claude Code のすすめ
schroneko
67
230k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Between Models and Reality
mayunak
4
500
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Optimizing for Happiness
mojombo
378
71k
Building an army of robots
kneath
307
47k
Crafting Experiences
bethany
1
380
Are puppies a ranking factor?
jonoalderson
2
4.1k
Paper Plane
katiecoart
PRO
5
54k
Accessibility Awareness
sabderemane
1
250
Transcript
4IPHP5BLBTBLJ 4IJCVZBBQL QBUDIͰը૾ͷ Ұ෦Λ৳ॖͤ͞Δ
ࣗݾհ w 4IPHP5BLBTBLJ w "OESPJEΤϯδχΞ w ৽ଔ!%F/" 1PDPDIB
ϝοηʔδΞϓϦͰΑ͘ݟΔ6* w ςΩετྖҬʹԠͯ͡ਧ͖ग़͕͠৳ॖ
ϝοηʔδΞϓϦͰΑ͘ݟΔ6* w ςΩετྖҬʹԠͯ͡ਧ͖ग़͕͠৳ॖ w ෦తʹ৳ͼͯཉ͍͠ʂ
1/(ϑΝΠϧΛར༻͢Δ߹ w 1/(Λͦͷ··͏ͱʜ
1/(ϑΝΠϧΛར༻͢Δ߹ w ը૾શମ͕ۉҰʹ৳ॖ
1/(ϑΝΠϧΛར༻͢Δ߹ ཧ ݱ࣮
1/(ϑΝΠϧΛར༻͢Δ߹ w ը૾શମ͕ۉҰʹ৳ॖ w 5BJM෦ͷ6*่͕ΕΔ
1/(ϑΝΠϧΛར༻͢Δ߹ w ը૾શମ͕ۉҰʹ৳ॖ w 5BJM෦ͷ6*่͕ΕΔ w ԑͷತԜ͕ڧௐ
ը૾Λ៉ྷʹ৳ॖͤ͞Δํ๏ w ෳࡶͳॲཧΛॻ͘ඞཁ͕͋Γͦ͏ w ը૾ॲཧඞཁ͔ʜ େมͦ͏ʜ
ը૾Λ៉ྷʹ৳ॖͤ͞Δํ๏ w ෳࡶͳॲཧΛॻ͘ඞཁ͕͋Γͦ͏ w ը૾ॲཧඞཁ͔ʜ w QBUDIը૾Ͱ؆୯ʹղܾʂ
QBUDIը૾ͱ w ը૾ͷपғϐΫηϧʹใΛຒΊࠐΜͩQOHϑΝΠϧ w ্ลɿਫฏํͷ৳ॖྖҬ w ࠨลɿਨํͷ৳ॖྖҬ w ఈลɿਫฏํͷίϯςϯπྖҬ w
ӈลɿਨํͷίϯςϯπྖҬ QBUDIը૾ͷ֓ཁ ը૾Ҿ༻IUUQTEFWFMPQFSBOESPJEDPNEFWFMPQVJ WJFXTHSBQIJDTESBXBCMFTOJOFQBUDI
QBUDIը૾ͷ࡞Γํ w "OESPJE4UVEJPͰ࡞Մೳʂ ը૾ΛӈΫϦοΫˠ$SFBUFQBUDIpMF
QBUDIը૾ͷ࡞Γํ w "OESPJE4UVEJPͰ࡞Մೳʂ ը૾ΛӈΫϦοΫˠ$SFBUFQBUDIpMF (6*Ͱ৳ॖྖҬΛఆٛ w ɿҰํ w ϐϯΫɿೋํ
QBUDIը૾ͷ࡞Γํ w "OESPJE4UVEJPͰ࡞Մೳʂ ը૾ΛӈΫϦοΫˠ$SFBUFQBUDIpMF (6*Ͱ৳ॖྖҬΛఆٛ w ɿҰํ w ϐϯΫɿೋํ ਨํʹ͔͠৳ͼͳ͍
QBUDIը૾ͷ࡞Γํ w "OESPJE4UVEJPͰ࡞Մೳʂ ը૾ΛӈΫϦοΫˠ$SFBUFQBUDIpMF (6*Ͱ৳ॖྖҬΛఆٛ w ɿҰํ w ϐϯΫɿೋํ มԽ͠ͳ͍
QBUDIը૾ͷදࣔ w #PYͷഎܠʹQBUDIը૾Λઃఆ fun Modifier.draw9Patch( context: Context, @DrawableRes ninePatchRes: Int,
) = this.drawBehind { drawIntoCanvas { ContextCompat.getDrawable(context, ninePatchRes)?.let { ninePatch -> ninePatch.run { bounds = Rect(0, 0, size.width.toInt(), size.height.toInt()) draw(it.nativeCanvas) } } } } QBUDIը૾Λഎܠʹඳը͢Δ.PEJpFSͷ֦ுؔ
QBUDIը૾ͷදࣔ w #PYͷഎܠʹQBUDIը૾Λઃఆ fun Modifier.draw9Patch( context: Context, @DrawableRes ninePatchRes: Int,
) = this.drawBehind { drawIntoCanvas { ContextCompat.getDrawable(context, ninePatchRes)?.let { ninePatch -> ninePatch.run { bounds = Rect(0, 0, size.width.toInt(), size.height.toInt()) draw(it.nativeCanvas) } } } } @Composable fun DynamicSpeechBubble( text: String, @DrawableRes bubbleImageRes: Int, paddingValues: PaddingValues, ) { val context = LocalContext.current Box( Modifier.draw9Patch(context = context, ninePatchRes = bubbleImageRes), ) { Text( text = text, color = Color.Black, modifier = Modifier.padding(paddingValues), ) } }
QBUDIը૾ͷҙ w +FUQBDL$PNQPTFͷQBJOUFS3FTPVSDFͰಡΈࠐΊͳ͍ w $PJMͷSFNFNCFS"TZOD*NBHF1BJOUFSͰಡΈࠐΊΔ͕ɺ ௨ৗͷ1/(ͱͯ͠ඳը͞ΕΔ ˠ$BOWBT9.-Λ༻͍ͯඳը͢Δ
QBUDIը૾ͷҙ w ը૾ͷੑ࣭ʹΑͬͯద͞ͳ͍ w άϥσʔγϣϯը૾ ը૾Ҿ༻IUUQT EFWFMPQFSBOESPJEDPNEFWFMPQVJ DPNQPTFHSBQIJDTESBXCSVTI IMKB
QBUDIը૾ͷҙ w ը૾ͷੑ࣭ʹΑͬͯద͞ͳ͍ w ܗঢ়͕ෳࡶͳը૾
ࢀߟ w IUUQTEFWFMPQFSBOESPJEDPNTUVEJPXSJUFESBXQBUDI w IUUQTEFWFMPQFSBOESPJEDPNEFWFMPQVJWJFXTHSBQIJDT ESBXBCMFTOJOFQBUDI w IUUQTTUBDLPWFSqPXDPNRVFTUJPOTIPXUPVTFB QBUDIESBXBCMFQOHJONZTDSFFOVTJOHKFUQBDLDPNQPTF