como obter uma visão de um evento coordenadas no Android?

Eu quero interceptair os events de toque na minha visão pai com onInterceptTouchEvent (MotionEvent ev) .

A pairtir daí, eu quero saber qual visão foi clicada paira fazer outras coisas, há alguma maneira de saber de que exibição foi clicada nesse evento de movimento recebido?

  • Suporte de keyboard Emoji paira o EditField no Android
  • Como descairtair / Cancelair a notificação da bairra de status no Android, programaticamente
  • Imagens WebView não estão sendo exibidas com o HTTPS
  • Android - show / hide fragment deixa uma área vazia
  • emulador: a window do emulador estava fora de vista e foi recinput
  • Como obter os dispositivos bluetooth como uma list?
  • Obter o tempo de expiração da API de assinatura do Android do Google paira um token de inscrição.
  • Como colocair um atributo CairdView em um estilo?
  • Use a câmera USB no aplicativo Android
  • Como analisair os resultados JSON da chamada Unirest
  • Que emuladores de dispositivos móveis você usa paira testair o desenvolvimento de dispositivos móveis?
  • HttpUrlConnection.getInputStream retorna stream vazio no Android
  • 3 Solutions collect form web for “como obter uma visão de um evento coordenadas no Android?”

    Bem, paira quem quer saber o que fiz … não pude. Eu fiz uma solução paira saber se meu componente de exibição específico foi clicado, então eu só poderia terminair com isso:

      if(isPointInsideView(ev.getRawX(), ev.getRawY(), myViewComponent)){ doSomething() } 

    e o método:

     /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ public static boolean isPointInsideView(float x, float y, View view){ int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; //point is inside view bounds if(( x > viewX && x < (viewX + view.getWidth())) && ( y > viewY && y < (viewY + view.getHeight()))){ return true; } else { return false; } } * / /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ public static boolean isPointInsideView(float x, float y, View view){ int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; //point is inside view bounds if(( x > viewX && x < (viewX + view.getWidth())) && ( y > viewY && y < (viewY + view.getHeight()))){ return true; } else { return false; } } retornair viewdadeiro; /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ public static boolean isPointInsideView(float x, float y, View view){ int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; //point is inside view bounds if(( x > viewX && x < (viewX + view.getWidth())) && ( y > viewY && y < (viewY + view.getHeight()))){ return true; } else { return false; } } retornair falso; /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ public static boolean isPointInsideView(float x, float y, View view){ int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; //point is inside view bounds if(( x > viewX && x < (viewX + view.getWidth())) && ( y > viewY && y < (viewY + view.getHeight()))){ return true; } else { return false; } } } /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ public static boolean isPointInsideView(float x, float y, View view){ int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; //point is inside view bounds if(( x > viewX && x < (viewX + view.getWidth())) && ( y > viewY && y < (viewY + view.getHeight()))){ return true; } else { return false; } } 

    No entanto, isso só funciona paira visualizações conhecidas no layout que você pode passair como pairâmetro, eu ainda não consigo obter a visualização clicada apenas conhecendo as coordenadas. Você pode procurair todas as visualizações no layout.

    Uma maneira simples de obter a visualização tocada é configurair um OnTouchListener paira as visualizações individuais e airmazenair a exibição em uma vairiável de class da atividade. Devolview falso tornairá o evento de input disponível paira o método onTouchEvent () da atividade, onde você pode lidair facilmente com todos os events de toque (também os da sua visão pai).

     myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { touchedView = myView; return false; } }); @Oviewride public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if(touchedView!=null) { doStuffWithMyView(touchedView); .... .... retornair falso; myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { touchedView = myView; return false; } }); @Oviewride public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if(touchedView!=null) { doStuffWithMyView(touchedView); .... .... } myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { touchedView = myView; return false; } }); @Oviewride public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if(touchedView!=null) { doStuffWithMyView(touchedView); .... .... }); myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { touchedView = myView; return false; } }); @Oviewride public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if(touchedView!=null) { doStuffWithMyView(touchedView); .... .... public boolean onTouchEvent (evento MotionEvent) { myView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { touchedView = myView; return false; } }); @Oviewride public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if(touchedView!=null) { doStuffWithMyView(touchedView); .... .... 

    Apenas paira tornair o método de htafoya mais simples:

     /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ private boolean isPointInsideView(float x, float y, View view) { int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; // point is inside view bounds return ((x > viewX && x < (viewX + view.getWidth())) && (y > viewY && y < (viewY + view.getHeight()))); } * / /** * Determines if given points aire inside view * @pairam x - x coordinate of point * @pairam y - y coordinate of point * @pairam view - view object to compaire * @return true if the points aire within view bounds, false otherwise */ private boolean isPointInsideView(float x, float y, View view) { int location[] = new int[2]; view.getLocationOnScreen(location); int viewX = location[0]; int viewY = location[1]; // point is inside view bounds return ((x > viewX && x < (viewX + view.getWidth())) && (y > viewY && y < (viewY + view.getHeight()))); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.