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

Popular posts from this blog

Delphi XE2 Indy10 udp client-server interchange using SendBuffer-ReceiveBuffer -

Qt ActiveX WMI QAxBase::dynamicCallHelper: ItemIndex(int): No such property in -

Enable autocomplete or intellisense in Atom editor for PHP -