2011-09-23 1 views
1

Voici mon code qui montre un PopUp lorsque le bouton est touché et le rejette, lorsque l'utilisateur libère son doigt.comment définir un OnTouchListener pour un PopupWindow?

Mais j'ai besoin de savoir si l'utilisateur vient de relâcher son doigt ou s'il a glissé dans le popup et libéré son doigt de là.

Dans mon code cela ne fonctionne pas vraiment, car je suppose que le popup ne se concentre pas sans que l'utilisateur ne lâche son doigt. Y a-t-il un moyen de le réparer?

Merci!

LinearLayout LinLay = new LinearLayout(this); 
    ImageView ivg = new ImageView(this); 
    ivg.setImageResource(R.drawable.icon); 
    LinLay.addView(ivg); 
    final PopupWindow pw = new PopupWindow(LinLay, 100, 100, true); 

    final Button bt2 = (Button)findViewById(R.id.button2); 
    bt2.setOnTouchListener(new OnTouchListener(){ 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN) 
       { 
       pw.showAtLocation(bt2, Gravity.CENTER, 0, 0); 
       } 
      else if(event.getAction() == MotionEvent.ACTION_UP) 
       { 
       pw.dismiss(); 
       } 
      return true; 
     } 
     }); 


    ivg.setOnTouchListener(new OnTouchListener(){ 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_UP) 
       { 
       showToast(); /// doesn't work! :) 
       } 
      return true; 
     } 
     }); 
    } 


public void showToast() 
{ 
    Toast.makeText(this, "AAA!", 500).show(); 
} 

Répondre

2

Pour utiliser imageview et imageview onclick() pour afficher la fenêtre de showpopoup()

im = new ImageView(this); 
     im.setImageResource(R.drawable.btn); 

     im.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showPopup(R.layout.popup_example); 
      } 
     }); 

et

private void showPopup(int resourses) { 

     final LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflate.inflate(resourses, null, false); 
     ViewGroup viewgroup = (ViewGroup) view 
       .findViewById(R.id.buttonContainer); 
     LinearLayout layout = new LinearLayout(this); 

     view.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View arg0, MotionEvent arg1) { 
       mPopup.dismiss(); 
       return true; 
      } 
     }); 

     mPopup = new PopupWindow(view, 160, LayoutParams.FILL_PARENT, true); 
     mPopup.setAnimationStyle(android.R.style.Animation_InputMethod); 
     mPopup.showAtLocation(view, Gravity.LEFT, 0, 10); 
    } 
+0

Merci pour l'entrée! :) Mais la question était un peu différente, j'ai besoin de trouver la météo, l'utilisateur avait libéré son doigt dans le popup ou en dehors de celui-ci. Bien sûr, je peux utiliser les coordonnées de l'événement, mais je pensais juste qu'il pourrait y avoir un meilleur moyen. – Roger

1

De toute évidence, il ne fonctionne pas. message envoyer comme suit:

ACTION_DOWN

  1. activité: événement tactile expédition
  2. activité: onUserInteraction
  3. mise en page: événement tactile expédition
  4. mise en page: bouton onInterceptTouchEvent
  5. : OnTouch (action_down)

ACTION_UP

  1. activité: événement tactile expédition
  2. mise en page: événement tactile expédition
  3. mise en page: bouton onInterceptTouchEvent
  4. : OnTouch ..

vous pouvez donc voir la méthode ne peut être transférer vers la vue supérieure.
imageview est le même niveau pour le bouton ..

Questions connexes