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
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
630
実践 脱Modifier.composed / Let's Modifier.Node
gya
2
860
タクシーアプリ『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
930
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
LanceDB入門
mocobeta
9
660
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.5k
【書籍出版記念】 10周回って、エージェント開発は RAGがすべてだった。〜RAGの歴史と開発現場で見えた実践知〜
akiratameto
11
4k
Adding Right-to-Left support to your web application with CSS logical properties — Lessons from Redmine
vividtone
0
160
カーネルまで探検して理解するふたつの自動計装
sumiyae
0
130
Flutter × BLE Centralを自前Pluginで実装する設計パターン - MethodChannel / EventChannelで作る双方向ブリッジの実践 / Building Custom Flutter BLE Central Plugins: Bidirectional Bridging with Method & Event Channels
bitkey
PRO
0
210
20260817_生成AIの動向と中学校・高等学校での活用を考える_v1.00_公開用
doradora09
PRO
0
180
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
110
Model Studio CLI × Token Plan
maigo999
0
200
Kiro Crew入門 - 常駐エージェントの仕組みと使いどころ / Intro to Kiro Crew
k_adachi_01
1
720
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
470
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
130
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
480
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
Everyday Curiosity
cassininazir
0
290
Paper Plane (Part 1)
katiecoart
PRO
1
10k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
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