Upgrade to Pro — share decks privately, control downloads, hide ads and more …

9-patchで画像の一部分を伸縮させる

Shirataki
January 31, 2025

 9-patchで画像の一部分を伸縮させる

Shibuya.apk#51で発表した内容です!

Shirataki

January 31, 2025
Tweet

More Decks by Shirataki

Other Decks in Programming

Transcript

  1. QBUDIը૾ͱ͸ w ը૾ͷपғϐΫηϧʹ৘ใΛຒΊࠐΜͩQOHϑΝΠϧ w ্ลɿਫฏํ޲ͷ৳ॖྖҬ w ࠨลɿਨ௚ํ޲ͷ৳ॖྖҬ w ఈลɿਫฏํ޲ͷίϯςϯπྖҬ w

    ӈลɿਨ௚ํ޲ͷίϯςϯπྖҬ QBUDIը૾ͷ֓ཁ ը૾Ҿ༻IUUQTEFWFMPQFSBOESPJEDPNEFWFMPQVJ WJFXTHSBQIJDTESBXBCMFTOJOFQBUDI
  2. 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ͷ֦ுؔ਺
  3. 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), ) } }