MyCustomView中的OnClickListener扩展了SurfaceView

时间:2014-11-02 12:51:48

标签: android surfaceview onclicklistener ontouchlistener ontouchevent

我有SurfaceView这样的扩展视图:

public class MyView extends SurfaceView implements View.OnClickListener {

  public MyView(Context context)
     {
        super(context);
        mContext = context;
        setOnClickListener(this);
     }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()){
        case DOWN OR UP OR MOVE: <-- I do something here like move and drag and drop and 
        // any related behavior to MyView 
    }
    invalidate();

    return true;
  }

现在我实现了OnClickListener并在我的构造函数中设置它。

OnClick 方法:

 @Override
 public void onClick(View v){
    Log.e("as", "clicked");
 }

但onClick方法从未调用过。我怎么解决这个问题?

return true;替换return super.onTouchEvent(event);我的onClick方法时调用,但当我想移动我的自定义视图时,再次调用onClick方法,这不是我的porpuse。
我只想在我点击我的自定义视图时,onClick调用,并且在移动时不调用它。

在此先感谢。

1 个答案:

答案 0 :(得分:0)

问题可能是你的onTouch Listener。你是压倒性的,而不是处理onClick的可能性。此外,您正在使用返回 true 来使用该事件,因此永远不会调用onClick。

请记住onClick是在原始视图类中实现的onTouchEvent中处理的。

您可以在以下网址查看更多信息:

http://developer.android.com/reference/android/view/View.html#onTouchEvent(android.view.MotionEvent)

你可以在这里阅读:

  

public boolean onTouchEvent (MotionEvent事件)

     

在API级别1中添加实现此方法以处理触摸屏   动议事件。

     

如果使用此方法检测点击操作,建议使用此方法   通过实现和调用performClick()来执行操作。   这将确保一致的系统行为,包括:

     
      
  • 服从点击声音首选项,调度OnClickListener调用
  •   
  • 在启用辅助功能时处理ACTION_CLICK
  •   
  • 参数event运动事件。
  •   
     

如果事件是,则返回True   处理,否则为假。

由于你想在执行点击时选择,你应该实现performClick(就像它在我引用的链接中所说的那样)。