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
9-patchで画像の一部分を伸縮させる
Search
Shirataki
January 31, 2025
Programming
220
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
360
Other Decks in Programming
See All in Programming
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
260
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.4k
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.2k
テーブルをDELETEした
yuzneri
0
120
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
9
5.8k
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
250
Foundation Models frameworkで画像分析
ryodeveloper
1
160
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
770
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
130
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
180
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
730
yield再入門 #phpcon
o0h
PRO
0
820
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
170
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
340
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Statistics for Hackers
jakevdp
799
230k
The Spectacular Lies of Maps
axbom
PRO
1
880
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
640
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
640
The Cult of Friendly URLs
andyhume
79
7k
The SEO Collaboration Effect
kristinabergwall1
1
510
Leo the Paperboy
mayatellez
8
1.9k
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