SlidView:在很多应用中都可以见到,左右滑动屏幕可以显示隐藏的菜单和其他布局。
演示效果:
演示代码,大家可以戳这里下载。
界面布局:
<com.flyingduck.slidviewdemo.view.SlidLayout
android:id="@+id/slid_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include
android:id="@+id/left_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/left_layout" />
<include
android:id="@+id/right_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/right_layout" />
<include
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/main_layout" />
</com.flyingduck.slidviewdemo.view.SlidLayout>
com.flyingduck.slidviewdemo.view.slidview 是继承的FrameLayout的一个自定义View(代码已放在GitHub上,欢迎大家fork和star),
其中include的三个布局都很简单,职位演示作用,更加负载的布局,大家可以自己添加在left_layout.xml right_layout.xml main_layout中。由于是继承的FrameLayout,所以需要将你应用的主布局放在最后这样才不会在显示的时候被其他布局覆盖。
提供的接口:
bindTouchableView(View view) 绑定一个View用于响应touch事件,我的例子中绑定的是main_layout.xml布局。不绑定View的话是没有滑动效果的。
unbindTouchableView(View view) 解除绑定
setLeftLayoutWidth(int leftLayoutWidth) 设置左侧布局显示的宽度
getLeftLayoutWidth()
setRightLayoutWidth(int rightLayoutWidth) 设置右侧布局显示的宽度
getRightLayoutWidth()
getScreenWidth() 获取屏幕的宽度,可以根据这个值来设置左/右侧布局的显示宽度
setMinDistanceCanSlid(int minDistance) 这个值设置手指滑动能引起其他页显示的最小距离
这里没有添加对手指滑动速度的判断来控制翻页的功能,主要是因为发现在手机等小屏幕设备上要求不是很明显,不过以后会加上。
实现原理:SlidView
重写了OnTouchListener的onTouch()方法,并将MotionEvent 传递给了GestureDetector处理,然后自定义SimpleOnGestureListener,重写其中的方法,主要是其中的 onScroll()方法。当然不使用GestureDetector 只重写onTouch()事件也是足够的。