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
私の好きなModifier関数 / My Favorite Modifier
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
gyamoto
October 27, 2022
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
私の好きなModifier関数 / My Favorite Modifier
gyamoto
October 27, 2022
More Decks by gyamoto
See All by gyamoto
脱Accompanistを考える / Bye Accompanist
gya
0
620
実践 脱Modifier.composed / Let's Modifier.Node
gya
2
850
タクシーアプリ『GO』Androidのリリースフロー / Release GO App
gya
1
1.5k
2022年ヘルスケアアプリのつくり方 / 2022 A Healthcare App Odyssey
gya
0
1.6k
タクシーアプリ「GO」AndroidにできるところからJetpack Composeを入れている話 / Introduce Jetpack Compose gradually
gya
0
920
Gradle BOM importでライブラリバージョン管理 / DroidKaigi2019
gya
3
2.4k
Firebaseで解決するAndroidの機種依存 / Firebase solve android device difference
gya
2
1.4k
Other Decks in Technology
See All in Technology
自律型AIエージェントは何を破壊するのか
kojira
0
150
NAB Show 2026 動画技術関連レポート / NAB Show 2026 Report
cyberagentdevelopers
PRO
0
160
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
120
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2k
JSAI2026 オーガナイズドセッションOS-27「不動産とAI」趣旨説明 / JSAI2026 Organized Session OS-27 “Real Estate and AI”: Statement of Purpose
ykiyota
0
220
失敗を経て、Harness Engineering で 大切にしたいことを考える / Learning from Failure: What Matters in Harness Engineering
bitkey
PRO
1
290
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
4
1.2k
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
170
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1k
地球に⽣きるAI —GeoAIと「中間領域」— / AI Living on Earth — GeoAI and the “Intermediate Layer” —
ykiyota
0
260
手塩にかけりゃいいってもんじゃない
ming_ayami
0
240
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.5k
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
A Tale of Four Properties
chriscoyier
163
24k
4 Signs Your Business is Dying
shpigford
187
22k
Everyday Curiosity
cassininazir
0
230
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
770
We Have a Design System, Now What?
morganepeng
55
8.2k
New Earth Scene 8
popppiees
3
2.3k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
A Soul's Torment
seathinner
6
2.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
Transcript
Mobility Technologies Co., Ltd. Androidへ 「愛」を語る会 私 好きなModifier関数 2022.10.27 開発本部
ソフトウェア開発部 ユーザーシステムグループ / Kohei Yamamoto 株式会社 Mobility Technologies
Mobility Technologies Co., Ltd. 2 自己紹介 株式会社Mobility Technologies(MoT) ユーザーシステムグループ /
山本 晃平 新卒でAndroidエンジニアとして幾つかサービスをリリース。 継続的なサービス 成長に携わりたいと思い、2021年8月に Mobility Technologies に入社。 タクシーアプリ『GO』 Androidアプリを開発。 @farundorl @gyamoto
Mobility Technologies Co., Ltd. 「未来へ行くなら、アンドロイドを持て」と聞いて、 じめて スマホを持つ 3 Android 思い出
Mobility Technologies Co., Ltd. 仕事としてアプリ開発を じめて、求められる UI/UX 難しさを知る。 「UI 統一感を出すために角丸で揃えたい」
「アプリを全画面に表示したい」 「いい感じにローディングを表示したい」 「iPhoneみたいなブラー」 4 Android 思い出
Mobility Technologies Co., Ltd. 5 Agenda 01|Shape 02|Insets 03|Placeholder 04|Blur
Mobility Technologies Co., Ltd. • Kotlin : 1.7.20 • Jetpack
Compose : 1.2.1 • Accompanist : 0.25.1 ◦ Insets ◦ System UI Controller ◦ Placeholder 6 動作環境
Mobility Technologies Co., Ltd. Shape 7 01
Mobility Technologies Co., Ltd. 「UI 統一感を出すために角丸で揃えたい」 ブランドとして 統一感を表現するために、何種類か View 形を揃える。
8 Shape
Mobility Technologies Co., Ltd. タクシーアプリ『GO』 場合 9 Shape FloatingActionButton ControlPanel
TextField Button
Mobility Technologies Co., Ltd. Android View 実装方法 • Material Design
2, 3 Theme に定義した Shape を設定 • 角丸半径を設定できる CardView 使用 • 角丸半径、背景色、枠線色をもつ ShapeDrawable を定義して背景に設定 ◦ 例え 状態によって背景色が変わる場合、バリエーションごとに ShapeDrawable 定義が必要になる 10 Shape
Mobility Technologies Co., Ltd. Jetpack Compose 実装方法 • Material Design
2, 3 Theme に定義した Shape を設定 • 角丸半径を設定できる RoundedCornerShape を定義して Modifier に設定 11 Shape // 半径8dpの角丸かつ白背景にする Modifier.background( color = Color.White, shape = RoundedCornerShape(8.dp) )
Mobility Technologies Co., Ltd. Shape 好きなポイント • よく長い XML になってしまう
ShapeDrawable 定義が不要になる • 状態によって背景色などが変わる場合も Shape み設定 • Shape をもとに Compose 切り抜き、背景表示、影表示ができる 12 Shape Modifier.background( // 状態によって背景色のみ変わる color = statusColor, shape = RoundedCornerShape(8.dp) ) Modifier // Composeを丸形に切り抜き .clip(shape = CircleShape) // 丸側にあわせた影を表示 .shadow( elevation = 4.dp, shape = CircleShape )
Mobility Technologies Co., Ltd. タクシーアプリ『GO』 場合 13 Shape Box( modifier
.graphicsLayer( // 吹き出し用のカスタムShapeを定義 shape = BalloonShape( cornerRadius = cornerRadius, triangle = BalloonShape.Triangle( size = triangleSize ), ), // 吹き出しの形にあわせて影をつける shadowElevation = elevation, clip = true ) .background(backgroundColor) ) { content() }
Mobility Technologies Co., Ltd. Insets 14 02
Mobility Technologies Co., Ltd. 「アプリを全画面に表示したい」 アプリを画面全体(Edge-to-edge)に表示する。 具体的に 、最上部に通知を表示する Status Bar
と 最下部に操作UIを表示する Navigation Bar にアプリ コンテンツを描画する。 15 Insets Status Bar Navigation Bar
Mobility Technologies Co., Ltd. Android View 実装方法 1. Status Bar
と Navigation Bar を表示領域とするために全画面表示フラグと透過を設定 2. 余白(fitsSystemWindows, padding, layout_margin)それぞれを適切に使用する 16 Insets
Mobility Technologies Co., Ltd. Jetpack Compose 実装方法 1. Status Bar
と Navigation Bar を表示領域とするために全画面表示フラグと透過を設定 2. 余白(contentPadding, padding)それぞれを適切に使用する 17 Insets
Mobility Technologies Co., Ltd. Jetpack Compose 実装方法 1. Status Bar
と Navigation Bar を表示領域とするために全画面表示フラグと透過を設定 ◦ System UI Controller ライブラリで設定 ▪ 試用ライブラリ群である Accompanist に含まれている 2. 余白(contentPadding, padding)それぞれを適切に使用する ◦ Insets ライブラリで設定 ▪ Accompanist から Jetpack Compose に移行 18 Insets
Mobility Technologies Co., Ltd. Jetpack Compose 実装方法 / 全画面表示と透明化 •
Modifier 使わずに、Activity と Composable でそれぞれ設定 19 Insets // Activityで全画面表示フラグを設定 WindowCompat.setDecorFitsSystemWindows(window, false) // @ComposableでStatusBar, NavigatonBarの透明化 val systemUiController = rememberSystemUiController() systemUiController.setSystemBarsColor( color = Color.Transparent, darkIcons = true // 背景色にあわせてアイコン色を設定 )
Mobility Technologies Co., Ltd. Jetpack Compose 実装方法 / 余白それぞれを適切に使用する •
Modifier として Status Bar, Navigation Bar 高さを設定 • もしく Modifier を使わずに contentPadding を設定 20 Insets LazyColumn( contentPadding = WindowInsets.statusBars .add(WindowInsets.navigationBars) .asPaddingValues(), ) { ... } Box(modifier = Modifier.statusBarsPadding()) Box(modifier = Modifier.navigationBarsPadding())
Mobility Technologies Co., Ltd. Insets 好きなポイント • とても複雑だった余白計算がシンプルになる • Activity
フラグ設定を除くと全画面表示 実装が Jetpack Compose で完結する 21 Insets
Mobility Technologies Co., Ltd. Placeholder 22 03
Mobility Technologies Co., Ltd. 「いい感じにローディングを表示したい」 プレースホルダーやスケルトンと呼 れる、表示コンテンツを予想させる 読込中アニメーションを表示する。 23 Placeholder
Mobility Technologies Co., Ltd. タクシーアプリ『GO』 場合 24 Placeholder タクシー会社や 待ち時間が表示される
運賃目安が表示される 支払方法が表示される
Mobility Technologies Co., Ltd. Android View 実装方法 1. アニメーション ライブラリを選定
2. アニメーション用レイアウト 用意 25 Placeholder
Mobility Technologies Co., Ltd. Jetpack Compose 実装方法 1. アニメーション ライブラリを選定
◦ Placeholderライブラリを使用 ▪ Accompanistに含まれている 2. アニメーション用レイアウト 用意 ◦ Modifier 設定でアニメーション表示 ◦ 読込後 レイアウトを流用できる場合もある 26 Placeholder Modifier.placeholder( visible = true, color = Color.LightGray )
Mobility Technologies Co., Ltd. Placeholder 好きなポイント • ライブラリ 選定に迷わず済みそう •
Modifier 設定で表示できる で、読込後 レイアウトを流用しやすい 27 Placeholder
Mobility Technologies Co., Ltd. Blur 28 04
Mobility Technologies Co., Ltd. 「iPhoneみたいなブラー」 背景等に表示するために、ぼかした画像を表示する。 29 Blur
Mobility Technologies Co., Ltd. Android View 実現方法 • RenderScript を使用して
Blur 画像を生成する • RenderEffect を使用する ◦ Android12 以降から使用可能 30 Blur
Mobility Technologies Co., Ltd. Jetpack Compose 実現方法 • Android だと手間
かかるブラーが1行で実装できる • 内部で RenderEffect を使用しているため Android12 以降 み 31 Blur Modifier.blur(radius = 8.dp)
Mobility Technologies Co., Ltd. Blur 好きなポイント • 個人的に今まで用意が面倒だったブラーが1行で実装できる!! 32 Blur
Mobility Technologies Co., Ltd. 時間が余ったとき 会社紹介 37 Appendix
Mobility Technologies Co., Ltd. 事業展開 38
Mobility Technologies Co., Ltd. 40 タクシーアプリ『GO』 開発を一緒にしませんか https://hrmos.co/pages/mo- t/jobs/2100002
Mobility Technologies Co., Ltd. メンバー・職種を深く知る機会 41
Mobility Technologies Co., Ltd. オフィス紹介 42