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
新しいVibe Codingと”自走”について
watany
6
330
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
200
AIはどのように 組織のアジリティを変えるのか?
junki
3
840
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
2.3k
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
20260619 私の日常業務での生成 AI 活用
masaruogura
1
210
Claude Codeをどのように キャッチアップしているか
oikon48
12
8.1k
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
660
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.1k
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
150
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
2
640
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Balancing Empowerment & Direction
lara
6
1.2k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Everyday Curiosity
cassininazir
0
230
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
220
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
RailsConf 2023
tenderlove
30
1.5k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Mind Mapping
helmedeiros
PRO
1
250
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
610
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