android开发艺术探索第三章 移动到指定位置和内外两种情况拦截分析
来源:互联网 发布:苏州2017打车软件 编辑:程序博客网 时间:2024/05/18 00:48
移动到指定位置的动画 移动的是内容
ObjectAnimator.ofFloat(mButton1,"translationX",0,100).setDuration(1000).start();final int startX = 0; final int deltaX = 100; ValueAnimator animator = ValueAnimator.ofInt(0, 1).setDuration(1000); animator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animator) { float fraction = animator.getAnimatedFraction(); mButton1.scrollTo(startX + (int) (deltaX * fraction), 0); } }); animator.start();
外部拦截
onInterceptTouchEvent 方法中 down事件需要返回false否则子View收不到事件。
@Override public boolean onInterceptTouchEvent(MotionEvent event) { boolean intercepted = false; int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { intercepted = false; if (!mScroller.isFinished()) { mScroller.abortAnimation(); intercepted = true; } break; } case MotionEvent.ACTION_MOVE: { int deltaX = x - mLastXIntercept; int deltaY = y - mLastYIntercept; if (Math.abs(deltaX) > Math.abs(deltaY)) {//核心 intercepted = true; } else { intercepted = false; } break; } case MotionEvent.ACTION_UP: { intercepted = false; break; } default: break; } @Override public boolean onTouchEvent(MotionEvent event) { mVelocityTracker.addMovement(event); int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { if (!mScroller.isFinished()) { mScroller.abortAnimation(); } break; } case MotionEvent.ACTION_MOVE: { int deltaX = x - mLastX; int deltaY = y - mLastY; scrollBy(-deltaX, 0); break; } //松手后,根据速度和位移来判断上一页还是下一页 case MotionEvent.ACTION_UP: { int scrollX = getScrollX(); int scrollToChildIndex = scrollX / mChildWidth; mVelocityTracker.computeCurrentVelocity(1000); float xVelocity = mVelocityTracker.getXVelocity(); if (Math.abs(xVelocity) >= 50) { mChildIndex = xVelocity > 0 ? mChildIndex - 1 : mChildIndex + 1; } else { mChildIndex = (scrollX + mChildWidth / 2) / mChildWidth; } mChildIndex = Math.max(0, Math.min(mChildIndex, mChildrenSize - 1)); int dx = mChildIndex * mChildWidth - scrollX; smoothScrollBy(dx, 0);//松手后做动画 mVelocityTracker.clear(); break; } default: break; } mLastX = x; mLastY = y; return true; }
内部拦截法(不推荐)
除down事件外,其他都拦截,然后子View调用disallow方法来获取
@Override public boolean onInterceptTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN) { mLastX = x; mLastY = y; if (!mScroller.isFinished()) { mScroller.abortAnimation(); return true; } return false; } else { return true; } }@Override public boolean dispatchTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { mHorizontalScrollViewEx2.requestDisallowInterceptTouchEvent(true); break; } case MotionEvent.ACTION_MOVE: { int deltaX = x - mLastX; int deltaY = y - mLastY; Log.d(TAG, "dx:" + deltaX + " dy:" + deltaY); if (Math.abs(deltaX) > Math.abs(deltaY)) { mHorizontalScrollViewEx2.requestDisallowInterceptTouchEvent(false); } break; } case MotionEvent.ACTION_UP: { break; } default: break; } mLastX = x; mLastY = y; return super.dispatchTouchEvent(event); }
0 0
- android开发艺术探索第三章 移动到指定位置和内外两种情况拦截分析
- Android开发艺术探索 第三章
- Android开发艺术探索笔记 第三章
- 《Android开发艺术探索》第三章笔记
- android 艺术开发探索 view移动 笔记
- Android开发艺术探索 读书笔记 第三章 View事件体系
- 《Android开发艺术探索》第三章事件分发机制小结
- 《Android开发艺术探索》第三章View事件体系小结
- Android移动图片到指定位置
- 《Android开发艺术探索第八章读书笔记》-Window和WindowManager
- 《Android开发艺术探索》第八章Window和WindowManager小结
- Android开发艺术探索
- android map开发2 移动指定位置
- View的事件体系 - Android开发艺术探索读书笔记(第三章)
- Android开发艺术探索——第三章View事件体系读书笔记
- 《Android 开发艺术探索》随手笔记——第三章View的事件体系
- Android 开发艺术探索读书笔记 第三章 View的事件体系
- Android艺术开发探索第三章——View的事件体系(上)
- java web实现img读取盘符下的图像《二》
- js设置手机号中间几位为隐藏星代替
- docker network
- 对象比较中equals与==的区别
- TensorFlow 基本概念和用法
- android开发艺术探索第三章 移动到指定位置和内外两种情况拦截分析
- 支持向量机通俗导论(理解SVM的三层境界)
- Unity3D MineCraft 使用Unity3D制作MineCraft 我的世界 存盘和读取问题解决
- HTML 基本格式
- 数据特征选择
- Mybatis-动态sql
- 第三天
- Windows环境下QT学习笔记01:QT Creator下新建项目
- React Native学习笔记之--图片的加载