2016-03-02 1 views
0

J'ai utilisé Au toucher méthode pour faire un bouton suivre mon contact. Mon code estLe bouton ne suit pas mon contact

b.setX(event.getX()); 
b.setY(event.getY()); 

Mon bouton frissonne quand je fais glisser et mon point de départ est à l'intérieur du bouton. Mais ce n'est pas le cas lorsque le point de départ est ailleurs que sur le bouton.

Répondre

0

La meilleure chose à faire est de déclarer une vue qui sera votre zone de contact. Ici, je mets tout l'écran, je mets l'événement sur la mise en page match_parent il est donc tout l'écran:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    final Button btn = (Button)findViewById(R.id.second); 

    final RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout); 

    layout.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      btn.setX(event.getX()); 
      btn.setY(event.getY()); 
      return true; 
     } 
    }); 
btn.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int[] pos = new int[2]; 
      layout.getLocationOnScreen(pos); 

      btn.setX(event.getRawX()); 
      btn.setY(event.getRawY() - pos[1]); 
      return true; 
     } 
    }); 
} 

xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/black" 
android:id="@+id/layout"> 

<Button 
    android:text="OK" 
    android:id="@+id/second" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@android:color/holo_red_dark" /> 


</RelativeLayout> 
+0

Mais encore si l'on clique sur le bouton et commencer à glisser, il se comporte mal . N'est-ce pas? – Aman

+0

J'ai édité ma réponse. getRawX() vous obtiendra le x et y basés sur le périphérique;). – king

+0

Le seul problème est que c'est en ajoutant la barre d'action et la hauteur de la barre de notification que vous devez trouver un moyen de les récupérer et de les soustraire. Comme obtenir la hauteur de l'écran et la hauteur de la vue racine par exemple;) – king