您的位置:首页 > 移动开发 > Android开发

android常用的侧滑面板

2016-06-24 11:10 211 查看

高仿QQ侧滑面板(两种)

本文章主要是介绍侧滑面板自定义的思路。

较前的QQ版本的侧滑控件(滑动后主面板缩小)

这个控件的实现思路是这样的:首先在布局要有两个面板,一个主面板,一个左面板(当然会侧滑的,可以按照自己的思路,自定义自己喜欢的面板),然后在代码实现控件的初始化,测量控件,鉴于一些同学还不是很清楚。我这里在说明一下:自定义layout最好继承FrameLayout,因为它帮我们做了测量控件工作,不然自己还需要手动实现onMeasure();其次我们还需要实现



需要注意的是:这时候是不能获取到控件的宽高的,因为这个方法是加载布局完成,但此时获取宽高还是空的,所以获取宽高需要重写下面的方法获取:



android.support.v4包下提供了view滑动的帮助类,这个类大大提高开发关于自定义view滑动。通过ViewDragHelper.create(View view,ViewDragHelper.Callback);获取到ViewDragHelper对象,重写callback,需要实现一个tryCaptureView的方法,这个方法返回的是boolean,表示哪个view触摸有响应,还需要重写


clampViewPositionHorizontal(View child, int left, int dx)这个方法表示横向滑动,其中left表示所在触摸的view上的移动的left值,这里需要处理view可移动的范围。

onViewPositionChanged(View changedView, int left, int top, int dx, int dy)这个方法表示view移动的改变的时候的回调,每当view移动的时候就会调用这个方法,所以这个方法一般用于作为伴随事件,可以通过指定的changedView,来处理事件。

onViewReleased(View releasedChild, float xvel, float yvel)这个方法是触摸的view在滑动后释放的所调用的,releasedChild就表示当前哪个view被释放,xvel,这个参数表示横向移动的速度,所以可以考虑在释放做一些移动效果。

getViewHorizontalDragRange(View child)这个范围表示滑动的范围,其实这个方法没重写时,也能实现这个侧滑面板,但是之后就会发现出现很多bug,但是无从解决(例如:在主面板上有listview这样的控件,在listview上滑动时,无法打开左面板),所以这个方法必须重写。

注意:重写拦截和触摸事件

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {
return mViewDragHelper.shouldInterceptTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
mViewDragHelper.processTouchEvent(event);
return true;
}




下面讲解一下,主面板如何缩小

主要是在onViewPositionChanged,view移动的时候改变一下view的动画,一般就是leftView.setScale(),但是这个方法是android3.0以后才有的,为了兼容低版本,一般都是导入nineoldandroids-2.4.0.jar,详细动画看代码:



这个是估值器,android原生api

参数解释:

第一个参数:一个值到另一个值的变化量

第二个参数:开始值

第三个参数:结束值



下面就是控件的效果:





这一种就是侧滑出来,但是不缩小的

主要的实现方法跟上面差不多,主要就是把缩放动画去掉,这里就不在赘述。





以上就是自定义侧滑,希望对大家有帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qq 控件 布局 android