- 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 的源码分析就到这里。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论