【发布时间】:2011-09-12 12:07:35
【问题描述】:
我有一个像按钮一样的自定义视图。我想在用户按下它时更改背景,当用户将手指移到外面或松开它时将背景恢复为原始背景,我还想处理 onClick/onLongClick 事件。问题是 onTouch 要求我为ACTION_DOWN 返回true,否则它不会向我发送ACTION_UP 事件。但如果我返回 true,onClick 监听器将无法工作。
我以为我通过在 onTouch 中返回 false 并注册 onClick 来解决它 - 它以某种方式起作用,但有点违反文档。我刚刚收到一位用户的消息,告诉我他无法长按该按钮,所以我想知道这里出了什么问题。
部分当前代码:
public boolean onTouch(View v, MotionEvent evt)
{
switch (evt.getAction())
{
case MotionEvent.ACTION_DOWN:
{
setSelection(true); // it just change the background
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_OUTSIDE:
{
setSelection(false); // it just change the background
break;
}
}
return false;
}
public void onClick(View v)
{
// some other code here
}
public boolean onLongClick(View view)
{
// just showing a Toast here
return false;
}
// somewhere else in code
setOnTouchListener(this);
setOnClickListener(this);
setOnLongClickListener(this);
如何让它们正确地协同工作?
提前致谢
【问题讨论】: