ViewDragHelper.CallBack中每个方法的用法
来源:互联网 发布:如何用阿里云os系统 编辑:程序博客网 时间:2024/06/05 05:40
ViewDragHelper.CallBack中每个方法的用法。
转载请表明出处:http://blog.csdn.net/coder_nice/article/details/44678153
假如你还不太了解DragHelper,请先看这片文章:http://blog.csdn.net/coder_nice/article/details/44592989
clampViewPositionHorizontal();
先看代码:
@Override public int clampViewPositionHorizontal(View child, int left, int dx) { final int leftBound = getPaddingLeft(); final int rightBound = getWidth() - mDragView.getWidth(); final int newLeft = Math.min(Math.max(left, leftBound), rightBound); return newLeft; }
此方法是用来控制水平方向移动的范围,每次调用
- 拿到当前的left值跟DragLayout的根布局的paddingleft值做比较,取两者中大的值,这样做是为了防止子view左边滑出根布局的左边界。
- 拿left和padding left中的较大值跟可滑动范围的右边界(根布局宽度减去子view的宽度)作比较,取较小值,这样做是为了防止子view右边滑出根布局右边界。
类似的clampViewPositionVertical()方法也就明白了。
getViewVerticalDragRange()
从字面意思就可以看出这是一个获取边界的方法,先看代码。
@Override public int getViewVerticalDragRange(View child) { return mDragRange; }然后看看mDragRange是怎么赋值的:@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { mDragRange = getHeight() - mHeaderView.getHeight(); }
所以很清楚了,范围值在最初测量摆放子view时,在onLayout方法就已经确定了。
类似的getViewHorizontalDragRange()也就明白了。
tryCaptureView()
确定当前子view是否可拖动,用法很简单。看看代码:
@Override public boolean tryCaptureView(View child, int pointerId) { return child == mHeaderView; }
这段代码表明只有当view是mHeaderView才可以拖动,其他子View都不可拖动。
onViewPositionChanged()
该方法在子view位置发生改变时都会被调用,可以在这个方法中做一些拖动过程中渐变的动画等操作,看看代码:
@Override public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { mTop = top; mDragOffset = (float) top / mDragRange; mHeaderView.setPivotX(mHeaderView.getWidth()); mHeaderView.setPivotY(mHeaderView.getHeight()); mHeaderView.setScaleX(1 - mDragOffset / 2); mHeaderView.setScaleY(1 - mDragOffset / 2); mDescView.setAlpha(1 - mDragOffset); requestLayout(); }
这段代码的意思是mHeaderView随着Y轴方向的位置变化做缩放,mDescView随着Y轴方向的位置变化做渐变,然后重绘界面。
onViewReleased()
该方法在手势拖动释放的时候被调用,可以在这里设置子View预期到达的位置,如果人为的手势拖动没有到达预期位置,我们可以让子View在人为的拖动结束后,再自动关的滑动到指定位置,看看代码:
@Override public void onViewReleased(View releasedChild, float xvel, float yvel) { int top = getPaddingTop(); if (yvel > 0 || (yvel == 0 && mDragOffset > 0.5f)) { top += mDragRange; } mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top); invalidate(); }
这段代码的意思是当人为的拖动结束后,如果没有到达顶部,则设置view自动滑动到顶部。
当然在onViewReleased()方法中还可以做一些其他的后续操作。
onEdgeTouched()
该方法很好理解了,就是当你触碰到边界时就会被调用。
前提是已经在DragHelper中设置了开启边界使用的模式,都则该方法不会被掉起,设置开启边界模式代码如下:
dragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);
这就算开启了左侧边界模式
onEdgeDragStarted()
前提是已经在DragHelper中设置了开启边界使用的模式,都则该方法不会被掉起,设置开启边界模式代码如下:
dragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT);
这就算开启了左侧边界模式
该方法比较有意思,当人为的从边界拖动(此时并没有拖动子view)时,可以选择关联某一个子view,实现只要从边界拖动,不管是否触碰到子view,都能控制子view一起拖动的效果,看看代码:
@Override public void onEdgeDragStarted(int edgeFlags, int pointerId) { super.onEdgeDragStarted(edgeFlags, pointerId); dragHelper.captureChildView(mDragView, pointerId); }
相当于把mDragView传递给了dragHelper,让mDragView关联到从边界开始的拖动。
- ViewDragHelper.CallBack中每个方法的用法
- ViewDragHelper的用法
- callback 的用法
- callback 函数的用法
- ViewDragHelper几个方法的理解
- 驱动中关于Callback 例程用法
- Android 中 View移动总结:ViewDragHelper学习及用法详解
- Android 中 View移动总结:ViewDragHelper学习及用法详解
- Android 中 View移动总结:ViewDragHelper学习及用法详解
- ViewDragHelper基本用法总结
- Java中CallBack的理解
- java中Callback的理解
- Java中CallBack的理解
- android中CallBack的理解
- Java中CallBack的理解
- android中CallBack的理解
- android中CallBack的理解
- ns3中callback的机制
- 看数据结构写代码(31)树的二叉链表的实现
- 题目1066 字符串排序 九度Online Judge
- UVa #11082 Matrix Decompressing (例题11-8)
- Android数据存储方式之:数据库操作
- web.xml学习笔记
- ViewDragHelper.CallBack中每个方法的用法
- 校内互测第二周(East!XVI~East!XX)总结(被虐启示录
- iframe 高度显示不正确解决方法 IE
- app应用之间的跳转代码
- 排序算法
- 仿手机QQ聊天列表滑动菜单删除和手势滑动返回的两种方式
- ServiceMix(一)
- mongodb的高级操作(聚合框架)
- asm在某个节点上没有执行