2011-05-03 53 views
10

我正在寻找捕捉用户触摸事件的坐标(为此,我实现了onTouch方法),但我也希望在用户触摸屏幕时显示上下文菜单。同时使用onTouch和onCreateContextMenu

当同时使用onTouchonCreateContextMenu方法时,每个触摸事件都会发送到方法onTouch。从不调用onCreateContextMenu方法。我猜这是预期的。然后,我尝试通过在onTouch方法中调用openContextMenu(v)来手动显示上下文菜单,此方法可行,但在调用onContextItemSelected(MenuItem item)后,菜单不会从屏幕消失。那我该如何做这项工作?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.record_match); 
    myCourtView = new MyImageView(getApplicationContext()); 
    ll = (LinearLayout)findViewById(R.id.linearLayout); 
    ll.addView(myCourtView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    registerForContextMenu(myCourtView); 
    myCourtView.requestFocus(); 
    myCourtView.setOnTouchListener(this); 

}// End OnCreate 


    // Implement the OnClickListener callback 
    public boolean onTouch(View v, MotionEvent event) { 
     //do something when user interacts with the court view 
     myCourtView.processEvent(event); 
     openContextMenu(v); 
     myCourtView.invalidate(); 
     return true; 
    }//End OnClickListener 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.shot_entry_menu, menu); 
}//End onCreateContextMenu 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.player_1: 
    //do something 
    return true; 
    case R.id.player_2: 
    //do something else 
    return true; 
    } 
    return true; 
}//End onContextItemSelected 

回答

0

你应该onTouch返回false:

如果

真正的听众已经消耗的情况下,否则为false。

0

对我来说,这个解决方案的工作:

myCourtView.setOnTouchListener(new OnTouchListener() 
    {public boolean onTouch(View v, MotionEvent ev) 
     {}); 

休息是相同

0

尝试把这种在公共布尔onTouch还真之后; registerForContextMenu(this.getListView());