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
参数解释:
第一个参数:一个值到另一个值的变化量
第二个参数:开始值
第三个参数:结束值
下面就是控件的效果:
这一种就是侧滑出来,但是不缩小的
主要的实现方法跟上面差不多,主要就是把缩放动画去掉,这里就不在赘述。
以上就是自定义侧滑,希望对大家有帮助。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories