android - Activity's onTouchEvent() is not being called while clicking on Button -
i want b.logic in activity.ontouchevent()
method. working fine textview
, other non clickable views. however, not getting called uponclicking of button
. need too.
here code.
public class mainactivity extends activity { private static final string tag = mainactivity.class.getsimplename(); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); findviewbyid(r.id.button1).setonclicklistener(new onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this, "oh shit!! click performed... :(", toast.length_long).show(); } }); } @override public boolean ontouchevent(motionevent event) { log.d(tag, "ssssssssssssssssssssssss:touch"); return super.ontouchevent(event); } public boolean dispatchtouchevent(motionevent event) { int eventaction=event.getaction(); switch(eventaction) { case motionevent.action_move: break; default: break; } return super.dispatchtouchevent(event); } }
please me sort out this.
i have used dispatchtouchevent(motionevent ev) required. here solution.
private boolean isinsideclicked = false; public boolean dispatchtouchevent(motionevent event) { if(event.getaction() == motionevent.action_down) { view content = findviewbyid(r.id.textview1); int[] contentlocation = new int[2]; content.getlocationonscreen(contentlocation); rect rect = new rect(contentlocation[0], contentlocation[1], contentlocation[0] + content.getwidth(), contentlocation[1] + content.getheight()); view frame = findviewbyid(r.id.edittext1); int[] framelocation = new int[2]; frame.getlocationonscreen(framelocation); rect framerect = new rect(framelocation[0], framelocation[1], framelocation[0] + frame.getwidth(), framelocation[1] + frame.getheight()); log.d(tag, "rect: "+rect.bottom+" , "+rect.top+" , "+rect.left+" , "+rect.right); log.d(tag, "framerect: "+framerect.bottom+" , "+framerect.top+" , "+framerect.left+" , "+framerect.right); log.d(tag, "x: "+event.getx()+" y: "+event.gety()); if((rect.contains((int)event.getx(), (int)event.gety()) || framerect.contains((int)event.getx(), (int)event.gety()) ) ) { isinsideclicked = true; } if(isinsideclicked){ return super.dispatchtouchevent(event); }else{ return true; } }else if(event.getaction() == motionevent.action_up && isinsideclicked) { isinsideclicked = false; return super.dispatchtouchevent(event); }else if(event.getaction() == motionevent.action_move && isinsideclicked) { return super.dispatchtouchevent(event); }else{ isinsideclicked = false; return true; } }
below hierarchy on how touch event processed os level.
activity.dispatchtouchevent() viewgroup.dispatchtouchevent() view.dispatchtouchevent() view.ontouchevent() viewgroup.ontouchevent() activity.ontouchevent()
with have restricted touch events of views not in required layouts/views.
Comments
Post a Comment