拖动(只要view大于屏幕,就会自动移动屏幕getScrollX)拖动使用scroller computerScroll()回调函数
来源:互联网 发布:linux中怎么查看主机ip 编辑:程序博客网 时间:2024/05/15 03:36
下面的代码段能使用户在屏幕上拖动一个对象。它记录了初始点的位置,计算点移动的距离,并将对象移动到新的位置。它正确的处理了这种情况:当第一个手指把控件拖到一个位置,然后按下第二个手指,且第二个手指与同一个控件上。当用户抬起第一个手指时,控件不会跑到第二个手指的位置同时第二个手指可以继续拖动控件。
[java] view plaincopy
- // The ‘active pointer’ is the one currently moving our object.
- private int mActivePointerId = INVALID_POINTER_ID;
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- // Let the ScaleGestureDetector inspect all events.
- mScaleDetector.onTouchEvent(ev);
- final int action = MotionEventCompat.getActionMasked(ev);
- switch (action) {
- case MotionEvent.ACTION_DOWN: {
- final int pointerIndex = MotionEventCompat.getActionIndex(ev);
- final float x = MotionEventCompat.getX(ev, pointerIndex);
- final float y = MotionEventCompat.getY(ev, pointerIndex);
- // Remember where we started (for dragging)
- mLastTouchX = x;
- mLastTouchY = y;
- // Save the ID of this pointer (for dragging)
- mActivePointerId = MotionEventCompat.getPointerId(ev, 0);
- break;
- }
- case MotionEvent.ACTION_MOVE: {
- // Find the index of the active pointer and fetch its position
- final int pointerIndex =
- MotionEventCompat.findPointerIndex(ev, mActivePointerId);
- final float x = MotionEventCompat.getX(ev, pointerIndex);
- final float y = MotionEventCompat.getY(ev, pointerIndex);
- // Only move if the ScaleGestureDetector isn't processing a gesture.
- if (!mScaleDetector.isInProgress()) {
- // Calculate the distance moved
- final float dx = x - mLastTouchX;
- final float dy = y - mLastTouchY;
- mPosX += dx;
- mPosY += dy;
- invalidate();
- }
- // Remember this touch position for the next move event
- mLastTouchX = x;
- mLastTouchY = y;
- break;
- }
- case MotionEvent.ACTION_UP: {
- mActivePointerId = INVALID_POINTER_ID;
- break;
- }
- case MotionEvent.ACTION_CANCEL: {
- mActivePointerId = INVALID_POINTER_ID;
- break;
- }
- case MotionEvent.ACTION_POINTER_UP: {
- final int pointerIndex = MotionEventCompat.getActionIndex(ev);
- final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex);
- if (pointerId == mActivePointerId) {
- // This was our active pointer going up. Choose a new
- // active pointer and adjust accordingly.
- final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
- mLastTouchX = MotionEventCompat.getX(ev, newPointerIndex);
- mLastTouchY = MotionEventCompat.getY(ev, newPointerIndex);
- mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex);
- }
- break;
- }
- }
- return true;
- }
0 0
- 拖动(只要view大于屏幕,就会自动移动屏幕getScrollX)拖动使用scroller computerScroll()回调函数
- quick-cocos2d-x(lua) 拖动精灵使其在屏幕移动的效果实现
- 在game屏幕拖动图片
- 捏合与拖动手势实现视图的缩放拖动 以及 任一边界拖进屏幕自动回弹
- Android-满屏幕拖动的控件
- Android-满屏幕拖动的控件
- Android-满屏幕拖动的控件
- 拖动控件,最终停靠在屏幕右侧
- Unity_在屏幕中拖动图片_067
- iOS 地图实现一个大头针在屏幕中心不随地图的拖动而移动
- js拖动弹框在页面移动,不出屏幕边界
- 【Android】自定义view-拖动小球移动
- livereload-实时自动刷新页面(只要检测的文件夹中文件有修改,页面就会自动刷新)(适用pc端、移动端)
- 你会使用回调函数吗?
- 你会使用回调函数吗?
- android自定义view继承linearLayout,view大小大于屏幕
- View回调函数
- 动态加载当前屏幕的网页图片(网页拖动时图片加载显示)
- innodb 物理行格式 compressed (怎么16进制中找不到最大最小伪记录)
- topcoder-srm-613-div2
- 退出按钮finish()和System区别
- listview刷新闪烁性能问题
- 结构体长度的计算超准确
- 拖动(只要view大于屏幕,就会自动移动屏幕getScrollX)拖动使用scroller computerScroll()回调函数
- 返回键返回后杀死进程
- JavaScript
- 拼接字符串的三个方式
- 并发服务器的设计
- 黑马程序员IOS-OC语言-Block
- 123页31题
- JavaScript中的对象
- jspSmartUpload上传下载全攻略(2012.8.30最新版)