Android MotionEvent中getX()和getRawX()的区别实例详解

 更新时间:2017年03月20日 11:36:14   投稿:lqh  
这篇文章主要介绍了Android MotionEvent中getX()和getRawX()的区别实例详解的相关资料,需要的朋友可以参考下

Android MotionEvent中getX()和getRawX()的区别实例详解

实例代码:

public class Res extends Activity implements View.OnTouchListener {  
  
  Button btn = null;  
  int x = 0;  
  int y = 0;  
  int rawx = 0;  
  int rawy = 0;  
  
    
  @Override  
  public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    btn = (Button) findViewById(R.id.button);  
    btn.setOnTouchListener(this);  
  }  
  
  public boolean onTouch(View view, MotionEvent event) {  
    int eventaction = event.getAction();  
    switch (eventaction) {  
    case MotionEvent.ACTION_DOWN:  
      break;  
    case MotionEvent.ACTION_MOVE:  
      x = (int) event.getX();  
      y = (int) event.getY();  
      rawx = (int) event.getRawX();  
      rawy = (int) event.getRawY();  
      Log.d("DEBUG", "getX=" + x + "getY=" + y + "n" + "getRawX=" + rawx  
          + "getRawY=" + rawy + "n");  
      break;  
  
    case MotionEvent.ACTION_UP:  
  
      break;  
    }  
    return false;  
  }  
}  

结论:

当你触到按钮时,x,y是相对于该按钮左上点(控件本身)的相对位置。

而rawx,rawy始终是相对于屏幕的位置。

可知:

  • getRowX:触摸点相对于屏幕的坐标
  • getX: 触摸点相对于按钮的坐标
  • getTop: 按钮左上角相对于父view(LinerLayout)的y坐标
  • getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标

可以想象 getRight()等同于下面的计算:getLeft()+getWidth()。

getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一样的道理

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android持久化技术之SharedPreferences存储实例详解

    Android持久化技术之SharedPreferences存储实例详解

    这篇文章主要介绍了Android持久化技术之SharedPreferences存储,结合实例形式较为详细的分析了SharedPreferences存储的原理、应用及具体实现方法,需要的朋友可以参考下
    2016-01-01
  • Android ActionBar制作时钟实例解析

    Android ActionBar制作时钟实例解析

    这篇文章主要为大家详细介绍了Android ActionBar制作时钟的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android 超详细SplashScreen入门教程

    Android 超详细SplashScreen入门教程

    Android 12正式版即将发布,有一个非常显著的视觉变化就是,Android 12强制给所有的App都增加了SplashScreen的功能。是的,即使你什么都不做,只要你的App安装到了Android 12手机上,都会自动拥有这个新功能
    2022-03-03
  • Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)

    Android实现基于滑动的SQLite数据分页加载技术(附demo源码下载)

    这篇文章主要介绍了Android实现基于滑动的SQLite数据分页加载技术,涉及Android针对SQLite数据的读取及查询结果的分页显示功能相关实现技巧,末尾还附带demo源码供读者下载参考,需要的朋友可以参考下
    2016-07-07
  • Android简单修改原有应用和添加应用的方法

    Android简单修改原有应用和添加应用的方法

    这篇文章主要介绍了Android简单修改原有应用和添加应用的方法,涉及Android工程项目中针对源码的修改及资源文件的编译等操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Android如何实现APP自动更新

    Android如何实现APP自动更新

    现在一般的android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。该小程序实现的就是这个功能。有需要的朋友们可以参考借鉴。
    2016-08-08
  • android handler.post和handler.sendMessage的区别和联系

    android handler.post和handler.sendMessage的区别和联系

    handler.post和handler.sendMessage本质上是没有区别的,都是发送一个消息到消息队列中,而且消息队列和handler都是依赖于同一个线程的。接下来通过本文给大家分享android handler.post和handler.sendMessage的区别和联系,一起看看吧
    2017-08-08
  • Android利用Espresso进行UI自动化测试的方法详解

    Android利用Espresso进行UI自动化测试的方法详解

    因为我是搞android开发的,所以被分到了自动化测试小组,所以了解了一些UI自动化测试。下面这篇文章主要给大家介绍了关于Android利用Espresso进行UI自动化测试的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • Flutter 如何封装文本输入框组件

    Flutter 如何封装文本输入框组件

    在实际开发过程中,往往开始是完成功能层面的开发,然而再考虑组件封装和代码优化。当然,组件封装越早做越好,因为这样会提高整个团队开发的规范性和效率。本文将介绍如何封装一个文本输入框组件
    2021-06-06
  • Android触摸事件和mousedown、mouseup、click事件之间的关系

    Android触摸事件和mousedown、mouseup、click事件之间的关系

    今天小编就为大家分享一篇关于Android触摸事件和mousedown、mouseup、click事件之间的关系,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论