今回の成果物
FlingLayout
https://github.com/chuross/flinglayout
特徴
Twitterの画像とこで使われてるように、上下にフリック操作すると画面を閉じれる挙動をレイアウトに内包するだけで実現できる。
導入
- jitpackをrepositoryに追加する
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile 'com.github.chuross:flinglayout:x.x.x'
}
使い方
サンプルプロジェクトではPhotoViewを使って実現している。
具体的にどう使えばTwitterみたいにできるんじゃみたいなの知りたい場合はここ見てね
https://github.com/chuross/flinglayout/tree/master/app
XMLにレイアウトを記述する
これだけで挙動自体は完成
内包できるViewは1つだけなので注意
<com.github.chuross.flinglayout.FlingLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- something view parent -->
</com.github.chuross.flinglayout.FlingLayout>
ドラッグ操作を制御する
FlingLatoutにドラッグを無効にするフラグを用意しているので適宜セットする
val flingLayout = findViewById<FlingLayout>(R.id.flinglayout)
flingLayout.isDragEnabled = false
サンプルプロジェクトではPhotoViewのスケールを見てフラグを必要に応じてセットしている。(拡大時はFlingLayoutはドラッグ操作を受け付けないようにしている)
Dismissのリスナーを拾って画面を閉じる
いつものDismiss用のリスナーセットできるようにしてあるので、それを使えばおk
val flingLayout = findViewById<FlingLayout>(R.id.flinglayout)
flingLayout.dismissListener = { /** something your code **/ }
XML属性一覧
key | type | description | etc |
---|---|---|---|
fl_isDragEnabled | boolean | ドラッグの有効 / 無効 | |
fl_isDismissEnabled | boolean | Dismissの有効 / 無効 | 無効にした場合はスワイプしても元の位置に戻る |
ライセンス
Copyright 2017 chuross
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
あとがき
内部的にはViewDragHelperを使用しているので、実装はいたってシンプルに作れた。
需要はありそうな気がしてたけど、ざっと検索した感じ引っかからなかったり、メンテされてなくてビルドできなかったりしてたので自分で作った。
Top comments (0)