我有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调用,并且在移动时不调用它。
在此先感谢。
答案 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(就像它在我引用的链接中所说的那样)。