Android开发---MotionEvent(一)
来源:互联网 发布:tomcat数据库密码设置 编辑:程序博客网 时间:2024/06/05 13:24
"我们之所以成功,是因为站在巨人的肩膀上!"
概念:Object used to report movement (mouse, pen, finger, trackball) events.记录移动事件的对象
屏幕坐标系:
一.参数
MotionEvent.ACTION_DOWN手指按下
MotionEvent.ACTION_MOVE手指移动
MotionEvent.ACTION_UP手指离开屏幕
二.核心方法
(一)MotionEvent ev.getX();
1.当手指在屏幕上点击或滑动,打印会得到数值
12-14 18:32:52.903 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->569.0
12-14 18:32:52.923 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->569.0
12-14 18:32:52.943 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->569.0
12-14 18:32:52.973 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->569.0
12-14 18:32:52.993 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->569.0
12-14 18:32:54.573 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->872.0
12-14 18:32:54.593 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->872.0
12-14 18:32:54.603 7188-7188/com.spl.schoolui I/wxs﹕ ev.getX()---------------------------------->872.0
2.数值解释:
getX()
从屏幕左侧边缘 到 屏幕右侧边缘 , 数值从小到大增长.
例子: Sony L39t 大约是 0.0 ~ 1000.0
3.说明:
a.每次点击屏幕都会得到X轴绝对位置的值
b.如果手指在屏幕移动,那么会得到连续的值
c.没有负值
(二)MotionEvent ev.getY();
数值解释:
getY()
从屏幕上边缘 到 屏幕下边缘 , 数值从小到大增长.
三.实际应用案例
校园网UI的侧滑菜单触发位置和动作判断:
(一)计算公式
lastActionDownX = ev.getX();//最后一次x轴位置
int xOffset = (int) (ev.getX() - lastActionDownX);//当前的相对位置
(二)案例说明
public class ResideMenu extends FrameLayout { ... ... @Override public boolean dispatchTouchEvent(MotionEvent ev) { float currentActivityScaleX = ViewHelper.getScaleX(viewActivity); if (currentActivityScaleX == 1.0f) setScaleDirectionByRawX(ev.getRawX()); switch (ev.getAction()) { //类似于v.getId()Return the kind of action being performed. 返回正在进行的动作类型 case MotionEvent.ACTION_DOWN: lastActionDownX = ev.getX();//记录上一次的位置 lastActionDownY = ev.getY(); isInIgnoredView = isInIgnoredView(ev) && !isOpened(); pressedState = PRESSED_DOWN; break; case MotionEvent.ACTION_MOVE: if (isInIgnoredView || isInDisableDirection(scaleDirection)) break; if (pressedState != PRESSED_DOWN && pressedState != PRESSED_MOVE_HORIZANTAL) break; int xOffset = (int) (ev.getX() - lastActionDownX);//计算公式 !得到的数值:1.向右滑动正数 2.向左滑动负数 int yOffset = (int) (ev.getY() - lastActionDownY); Log.i("wxs", "ev.getX()---------------------------------->" + ev.getX()); // Log.i("wxs","xOffset------------------------------------>"+xOffset); // Log.i("wxs","yOffset------------------------------------>"); //设定什么情况下显示侧滑菜单 if (pressedState == PRESSED_DOWN) { if (yOffset > 25 || yOffset < -25) { pressedState = PRESSED_MOVE_VERTICAL; break; } //这里对何时触发侧滑菜单进行了判断 (原本是这样的 : xOffset < -50 || xOffset > 50 , 条件错误) //改为 : 只有点击了距离屏幕左侧小于200的位置(x轴上) , 并且向右滑动了大于50的距离时(x轴上) , 才触发侧滑菜单! //这时才会把按压状态设置为horizonta , 并且把motionevent设置为取消 if (lastActionDownX < 200 && xOffset > 50) { pressedState = PRESSED_MOVE_HORIZANTAL; ev.setAction(MotionEvent.ACTION_CANCEL); } } else if (pressedState == PRESSED_MOVE_HORIZANTAL) { if (currentActivityScaleX < 0.95) scrollViewMenu.setVisibility(VISIBLE);//显示侧滑菜单 float targetScale = getTargetScale(ev.getRawX()); ViewHelper.setScaleX(viewActivity, targetScale); ViewHelper.setScaleY(viewActivity, targetScale); ViewHelper.setScaleX(imageViewShadow, targetScale + shadowAdjustScaleX); ViewHelper.setScaleY(imageViewShadow, targetScale + shadowAdjustScaleY); ViewHelper.setAlpha(scrollViewMenu, (1 - targetScale) * 2.0f); lastRawX = ev.getRawX(); return true; } break; case MotionEvent.ACTION_UP: if (isInIgnoredView) break; if (pressedState != PRESSED_MOVE_HORIZANTAL) break; pressedState = PRESSED_DONE; if (isOpened()) { if (currentActivityScaleX > 0.56f) closeMenu(); else openMenu(scaleDirection); } else { if (currentActivityScaleX < 0.94f) { openMenu(scaleDirection); } else { closeMenu(); } } break; } lastRawX = ev.getRawX(); return super.dispatchTouchEvent(ev); } ... ...}
2 0
- Android开发---MotionEvent(一)
- Android触控-MotionEvent(一)
- Android触控 MotionEvent(一)
- Android触控 MotionEvent(一)
- android触控,先了解MotionEvent(一)
- android触控,先了解MotionEvent(一)
- android触控,先了解MotionEvent(一)
- android触控,先了解MotionEvent(一)
- android触控,先了解MotionEvent(一)
- android:MotionEvent
- android:MotionEvent
- android MotionEvent
- android motionevent
- Android MotionEvent
- android MotionEvent
- Android MotionEvent
- android MotionEvent
- 【Android开发】事件类MotionEvent的一些认识
- MySQL安装
- Linux系统中的基本操作命令
- 欢迎使用CSDN-markdown编辑器
- 分享几款分析流量的工具
- java集合框架:Vector演示(其实枚举和迭代是一样的)
- Android开发---MotionEvent(一)
- C语言数组与指针详解
- 企业新站如何优化标题尽快获取排名
- 《剑指offer》之字符串专题
- JAVA中clone()方法与Cloneable接口详细说明
- 【HTML5基础】第1章:HTML5概述
- linux命令
- 练习
- JavaScript基础