- CompoundButton 源码分析
- LinearLayout 源码分析
- SearchView 源码解析
- LruCache 源码解析
- ViewDragHelper 源码解析
- BottomSheets 源码解析
- Media Player 源码分析
- NavigationView 源码解析
- Service 源码解析
- Binder 源码分析
- Android 应用 Preference 相关及源码浅析 SharePreferences 篇
- ScrollView 源码解析
- Handler 源码解析
- NestedScrollView 源码解析
- SQLiteOpenHelper/SQLiteDatabase/Cursor 源码解析
- Bundle 源码解析
- LocalBroadcastManager 源码解析
- Toast 源码解析
- TextInputLayout
- LayoutInflater 和 LayoutInflaterCompat 源码解析
- TextView 源码解析
- NestedScrolling 事件机制源码解析
- ViewGroup 源码解析
- StaticLayout 源码分析
- AtomicFile 源码解析
- AtomicFile 源码解析
- Spannable 源码分析
- Notification 之 Android 5.0 实现原理
- CoordinatorLayout 源码分析
- Scroller 源码解析
- SwipeRefreshLayout 源码分析
- FloatingActionButton 源码解析
- AsyncTask 源码分析
- TabLayout 源码解析
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.9. releaseViewForPointerUp() 方法的实现
private void releaseViewForPointerUp() { //计算出当前 x 和 y 方向上的加速度 mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity); final float xvel = clampMag( VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId), mMinVelocity, mMaxVelocity); final float yvel = clampMag( VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId), mMinVelocity, mMaxVelocity); dispatchViewReleased(xvel, yvel); }
计算完加速度后就调用了 dispatchViewReleased()
:
private void dispatchViewReleased(float xvel, float yvel) { //设定当前正处于释放阶段 mReleaseInProgress = true; //回调 callback 的 onViewReleased() 方法 mCallback.onViewReleased(mCapturedView, xvel, yvel); mReleaseInProgress = false; //设定状态 if (mDragState == STATE_DRAGGING) { // onViewReleased didn't call a method that would have changed this. Go idle. //如果 onViewReleased() 中没有调用任何方法,则状态设定为 STATE_IDLE setDragState(STATE_IDLE); } }
所以最后释放后的处理交给了 callback
中的 onViewReleased()
方法,如果我们什么都不做,那么这个被拖拽的 View
就是停止在当前位置,或者我们可以调用 ViewDragHelper
提供给我们的这几个方法:
- settleCapturedViewAt(int finalLeft, int finalTop) 以松手前的滑动速度为初速动,让捕获到的 View 自动滚动到指定位置。只能在 Callback 的 onViewReleased() 中调用。
- flingCapturedView(int minLeft, int minTop, int maxLeft, int maxTop) 以松手前的滑动速度为初速动,让捕获到的 View 在指定范围内 fling。只能在 Callback 的 onViewReleased() 中调用。
- smoothSlideViewTo(View child, int finalLeft, int finalTop) 指定某个 View 自动滚动到指定的位置,初速度为 0,可在任何地方调用。
引用自 这篇文章 ,具体释放后的原理我们就不分析了,其实就是配合 Scroller
这个类来实现,具体也可以参照上面这篇文章。好,我们关于 ViewDragHelper
的源码分析就到这里。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论