关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1984字,纯文字阅读大概需要3分钟。
内容图文
今天做一个自定义ViewGroup,通过addView动态添加子控件,为了省事,直接在父控件里重写public boolean onTouchEvent(MotionEvent event){}方法来监听当前触碰是哪个按钮,遇到点问题,所以写下来。
首先是点击效果只有 MotionEvent.ACTION_DOWN,这个把返回改为return true;就行了
然后是 getX()和getRawX()的区别,这个这篇博文有写到
http://www.cnblogs.com/foura/articles/2016881.html
总结就是:getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一样的道理
之前设置矩形一直是
rects.add(new Rect());
getChildAt(i).getGlobalVisibleRect(rects.get(i));但今天出了点问题,坐标一直不对,
只好直接使用 rects.add(new Rect(v.getLeft(),v.getTop(),v.getRight(),v.getBottom()));
使用子View在父View中的位置来绘制矩形,然后比较父View的getX()方法。
关于这些看着头晕的方法的区别,主要是参考这篇,来区分哪个是相对屏幕,哪个是相对自己
http://blog.csdn.net/centralperk/article/details/7949900
尤其是这个getLeft , getTop, getBottom, getRight, 这一组是获取子View相对在它父View里的坐标,这个的帮助。
这边随便贴个监听的方法,当然还要完善一下才能用,解决点小问题
private ArrayList<Rect> rects = new ArrayList<Rect>(); private int eventX = 0; private int eventY = 0; @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub // Log.e("", "_____"+event.getAction()); if(event.getAction() == MotionEvent.ACTION_DOWN){ eventX = (int) event.getX(); eventY = (int) event.getY(); } //判断当前用户点击的那一项 if (event.getAction() == MotionEvent.ACTION_UP) { int upX = (int) event.getX(); int upY = (int) event.getY(); if(Math.abs(upX-eventX)<50&&Math.abs(upY-eventY)<50){ for (int i = 0,len=getChildCount(); i < len; i++) { if(rects.size() < len){ View v = getChildAt(i); rects.add(new Rect(v.getLeft(),v.getTop(),v.getRight(),v.getBottom())); } // Log.e("", +upX+"+"+event.getRawX()+"__"+upY+"+"+event.getRawY()+"___"+rects.get(i)); if(rects.get(i).contains(upX, upY)){ Log.e("", "i__"+i); getChildAt(i).setSelected(true); }else{ getChildAt(i).setSelected(false); } } } } return true; }
本文出自 “苍蝇学android” 博客,请务必保留此出处http://qq445493481.blog.51cto.com/9545543/1716388
原文:http://qq445493481.blog.51cto.com/9545543/1716388
内容总结
以上是互联网集市为您收集整理的关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听全部内容,希望文章能够帮你解决关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。