2011-09-23 75 views
1

這是我的代碼,當用戶釋放他的手指時,該按鈕被觸摸並顯示一個彈出窗口並將其解除。如何爲PopupWindow設置OnTouchListener?

但我需要知道用戶剛釋放手指的天氣,還是他滑入彈出窗口並從那裏釋放他的手指。

在我的代碼中,這並沒有真正起作用,因爲我猜彈出窗口不會在用戶釋放他的手指時得到焦點。有沒有辦法解決它?

謝謝!

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(); 
} 

回答

2

要使用的ImageView和ImageView的的onclick()來顯示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); 
      } 
     }); 

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

感謝您的輸入! :)但問題有點不同,我需要找出用戶在彈出窗口或其外部釋放手指的天氣。當然,我可以使用事件座標,但只是認爲可能有更好的方法。 – Roger

1

顯然,這是行不通的。信息發送如下:

ACTION_DOWN

  1. 活性:調度觸摸事件
  2. 活性:onUserInteraction
  3. 佈局:調度觸摸事件
  4. 佈局:onInterceptTouchEvent
  5. 按鈕:onTouch(ACTION_DOWN)

ACTION_UP

  1. 活動:調度觸摸事件
  2. 佈局:調度觸摸事件
  3. 佈局:onInterceptTouchEvent
  4. 按鈕:ontouch ..

所以你可以看到該方法只能是轉移到查看。
imageview是與按鈕相同的級別..

相關問題