Submit Search
Upload
僕は上スワイプでBottomSheetを出したかっただけなんだ
•
0 likes
•
2,345 views
Takao Sumitomo
Follow
2019-03-27 potatotips #60 の発表資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 29
Download now
Download to read offline
Recommended
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
ktateish
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
啓 杉本
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
kidach1
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
Masahito Zembutsu
Recommended
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
コンセプトから理解するGitコマンド
コンセプトから理解するGitコマンド
ktateish
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
啓 杉本
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
kidach1
Docker 9 tips~意外と知られていない日常で役立つ便利技
Docker 9 tips~意外と知られていない日常で役立つ便利技
Masahito Zembutsu
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
Takayuki Shimizukawa
ダブル配列の実装方法
ダブル配列の実装方法
Higashiyama Masahiko
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
VirtualTech Japan Inc./Begi.net Inc.
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
Nobuhiro Iwamatsu
Gitの便利ワザ
Gitの便利ワザ
ktateish
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
Post-quantum zk-SNARKs on Hyperledger Fabric
Post-quantum zk-SNARKs on Hyperledger Fabric
Hyperleger Tokyo Meetup
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
Blazor WebAssembly と Windows Forms でのロジック共有例
Blazor WebAssembly と Windows Forms でのロジック共有例
Koichi Ota
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
Shuntaro Saiba
Pythonとパッケージングと私
Pythonとパッケージングと私
Atsushi Odagiri
Suphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement Learning
harmonylab
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方
Takao Sumitomo
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
Takao Sumitomo
More Related Content
What's hot
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
Takayuki Shimizukawa
ダブル配列の実装方法
ダブル配列の実装方法
Higashiyama Masahiko
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
VirtualTech Japan Inc./Begi.net Inc.
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
Nobuhiro Iwamatsu
Gitの便利ワザ
Gitの便利ワザ
ktateish
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
Post-quantum zk-SNARKs on Hyperledger Fabric
Post-quantum zk-SNARKs on Hyperledger Fabric
Hyperleger Tokyo Meetup
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
Blazor WebAssembly と Windows Forms でのロジック共有例
Blazor WebAssembly と Windows Forms でのロジック共有例
Koichi Ota
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
gree_tech
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
Shuntaro Saiba
Pythonとパッケージングと私
Pythonとパッケージングと私
Atsushi Odagiri
Suphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement Learning
harmonylab
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
LINE Corporation
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
What's hot
(20)
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
ダブル配列の実装方法
ダブル配列の実装方法
Raspberry Piで始める自宅サーバー超入門
Raspberry Piで始める自宅サーバー超入門
Yocto Project ハンズオン プレゼン用資料
Yocto Project ハンズオン プレゼン用資料
Gitの便利ワザ
Gitの便利ワザ
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Post-quantum zk-SNARKs on Hyperledger Fabric
Post-quantum zk-SNARKs on Hyperledger Fabric
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
明日使えないすごいビット演算
明日使えないすごいビット演算
Blazor WebAssembly と Windows Forms でのロジック共有例
Blazor WebAssembly と Windows Forms でのロジック共有例
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
ゲームアプリの数学@GREE GameDevelopers' Meetup
ゲームアプリの数学@GREE GameDevelopers' Meetup
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
新卒3年目のぼくが、でぶおぷす???なインフラおじさん方にAnsibleを導入してみた
Pythonとパッケージングと私
Pythonとパッケージングと私
Suphx: Mastering Mahjong with Deep Reinforcement Learning
Suphx: Mastering Mahjong with Deep Reinforcement Learning
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
SpectreとMeltdown:最近のCPUの深い話
SpectreとMeltdown:最近のCPUの深い話
Kotlinアンチパターン
Kotlinアンチパターン
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
More from Takao Sumitomo
sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方
Takao Sumitomo
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
Takao Sumitomo
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Takao Sumitomo
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
Takao Sumitomo
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
Takao Sumitomo
高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること
Takao Sumitomo
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Takao Sumitomo
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチ
Takao Sumitomo
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれること
Takao Sumitomo
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にする
Takao Sumitomo
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
Takao Sumitomo
Wantedlyのテスト事情
Wantedlyのテスト事情
Takao Sumitomo
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
Takao Sumitomo
Uml速習会
Uml速習会
Takao Sumitomo
potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料
Takao Sumitomo
SQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗く
Takao Sumitomo
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Takao Sumitomo
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
Takao Sumitomo
勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム
Takao Sumitomo
勉強会資料 Uml概要
勉強会資料 Uml概要
Takao Sumitomo
More from Takao Sumitomo
(20)
sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチ
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれること
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にする
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
Wantedlyのテスト事情
Wantedlyのテスト事情
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
Uml速習会
Uml速習会
potatotips (iOS/Android開発Tips共有会) 第19回 資料
potatotips (iOS/Android開発Tips共有会) 第19回 資料
SQLiteDatabaseを無理矢理覗く
SQLiteDatabaseを無理矢理覗く
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム
勉強会資料 Uml概要
勉強会資料 Uml概要
Recently uploaded
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Recently uploaded
(10)
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
僕は上スワイプでBottomSheetを出したかっただけなんだ
1.
2019-03-27 potatotips #60
@cattaka_net 僕は上スワイプでBottomSheetを 出したかっただけなんだ Takao Sumitomo @cattaka_net
2.
2019-03-27 potatotips #60
@cattaka_net 自己紹介 ● 住友 孝郎(Takao Sumitomo) ● Wantedly, Inc. 所属 ● Androidアプリを主に担当 ● @cattaka_net Goは書かないけどゴーファーが好き (アイコンは気分で変わる)
3.
2019-03-27 potatotips #60
@cattaka_net
4.
2019-03-27 potatotips #60
@cattaka_net 本題
5.
2019-03-27 potatotips #60
@cattaka_net BottomSheetはご存知ですよね
6.
下から出てくるやつ ● BottomSheetDialogが有名 ● 例)Material Design ● by Eajy ● https://goo.gl/YrChM4
7.
これを上スワイプで出るようにしたかった こんなのが作りたかった→
8.
処理の本体はBottomSheetBehavior ←親のCoordinatorLayout ←子要素のView 1:Nested Scrollが親に伝わる 2:イベントをリレー BottomSheetBehavior 3:子要素のViewの座標を動かす
9.
アプローチ
10.
アプローチ ←ここのスクロールイベントを奪う BottomSheetBehavior 奪ったイベント どちらかにリレー
11.
スクロール量の奪い方
12.
親のViewにOnTouchListenerを仕込んで頑張る? ● 独自実装したくない... ● 別件でロングタップも使いたい ● スクロール開始の閾値とかやりたくない ←この部分に仕込む
13.
強引にNestedScrollする? 見た目上はBottomSheetの後ろにあるけど、 ViewTree上はNested ScrollできるViewを置く? Viewの構造的に無理だよね、、
14.
GestureDetectorを使う ● タッチイベントからユーザー操作の識別してくれる ● i.e. ロングタップやスクロール ←この部分に仕込む
15.
OnGestureListener ● GestureDetectorとセットで使う ● 便利なリスナー達 ● onDown ● onShowPress ● onFling ● onSingleTapUp ● onLongPress ● onScroll
16.
スクロール量の喰わせ方
17.
BottomSheetBehaviorに強引に喰わせる? ● そもそもスクロール量のsetterがない、、 BottomSheetBehavior 奪ったイベント
18.
NestedScrollイベントを捏造して喰わせる 奪ったイベント 子ViewがNested Scrollしたかのように して、親Viewにイベントを送る
19.
NestedScrollイベントの捏造方法 @Override public boolean onScroll(MotionEvent
e1, MotionEvent e2, float distanceX, float distanceY) { if (!isScrolling) { isScrolling = true; mCoordinatorLayout.onStartNestedScroll( mBottomSheetView, mBottomSheetView, ViewCompat.SCROLL_AXIS_VERTICAL, ViewCompat.TYPE_TOUCH ); } mCoordinatorLayout.onNestedPreScroll( mBottomSheetView, (int) distanceX, (int) distanceY, new int[2], ViewCompat.TYPE_TOUCH ); return true; } ←初回はNestedScrollの開始を伝える ←スクロールイベントを送る
20.
NestedScrollイベントの捏造方法 @Override public boolean onTouch(View
v, MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_UP) { if (isScrolling) { isScrolling = false; mCoordinatorLayout.onStopNestedScroll( mBottomSheetView, ViewCompat.TYPE_TOUCH ); } } return gestureDetector.onTouchEvent(event); } ←NestedScrollの終わりを伝える
21.
なんとか動いた!
22.
学んだこと
23.
NestedScrollは危険が危ない
24.
イベントハンドラがいっぱいある ● boolean onStartNestedScroll ●
void onNestedScrollAccepted ● void onStopNestedScroll ● void onNestedScroll ● void onNestedPreScroll ● boolean onNestedFling ● boolean onNestedPreFling
25.
メソッドの実装が2系統ある ● 新しいもの ● NestedScrollingChild2 ● NestedScrollingParent2 ● 古いもの ● NestedScrollingChild ● NestedScrollingParent
26.
ライブラリによっては1部分しか実装してない ● Viewの構造を入れ替えたとき、 途中にPreとか新旧とか、 片方しか実装してないのが混ざると、 動かない ● デバッガでステップ実行してると、 「ぉ、、、ぉぅ、、、」ってなる ● BottomSheetBehaviorはPreのみ実装
27.
みなさんも気をつけてください
28.
この発表のサンプルコード&アプリ ● cattaka/AndroidSnippets ● http://github.com/cattaka/AndroidSnippets/ ● BottomSheetBehaviorOpenBySwipeUpActivity.java ● Google Play ● https://goo.gl/HuAtZG ● Open by
up
29.
ご清聴ありがとうございました Takao Sumitomo @cattaka_net
Download now