2011-09-23 77 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是与按钮相同的级别..

相关问题