欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-02 14:17:22
android motionevent中getx()和getrawx()的区别实例详解 实例代码: public class res extends activ...

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始终是相对于屏幕的位置。

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

可知:

  • getrowx:触摸点相对于屏幕的坐标
  • getx: 触摸点相对于按钮的坐标
  • gettop: 按钮左上角相对于父view(linerlayout)的y坐标
  • getleft: 按钮左上角相对于父view(linerlayout)的x坐标

可以想象 getright()等同于下面的计算:getleft()+getwidth()。

getx()是表示widget相对于自身左上角的x坐标,而getrawx()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titlebar或是否全屏幕),gety(),getrawy()一样的道理

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