【发布时间】:2015-07-19 11:04:57
【问题描述】:
我有一个带有标准 setOnClickListener() 调用的自定义布局。
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// some click related code
}
});
在这个布局中是一个应该水平拖动的视图。
我写了一些代码,它或多或少地做了我想要它做的事情:
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result = true;
final int action = event.getAction();
final float x = event.getRawX();
final float y = event.getRawY();
switch (action) {
case MotionEvent.ACTION_DOWN: {
mInitialTouchX = x;
mInitialTouchY = y;
mStartX = getX();
mStartY = getY();
break;
}
case MotionEvent.ACTION_MOVE: {
Logger.d("MOVE");
if (direction == -1) {
}
final float dx = x - mInitialTouchX;
final float dy = y - mInitialTouchY;
mPosX = mStartX + dx;
mPosY = mStartY + dy;
if (Math.abs(dx) > SWYPE_MIN_TRAVEL) {
if (Math.abs(mPosX) < maximumSwypeDistance) {
setTranslationX(mPosX);
}
}
break;
}
case MotionEvent.ACTION_UP:
Logger.d("UP");
case MotionEvent.ACTION_CANCEL:
Logger.d("CANCEL");
case MotionEvent.ACTION_POINTER_UP:
Logger.d("POINTER_UP");
final float dx = x - mInitialTouchX;
if (Math.abs(dx) < SWYPE_MIN_TRAVEL) {
Logger.d("click");
result = false;
}
break;
}
return result;
}
问题是:我怎样才能两者兼得?
编辑:使用 Gunnar Karlssons 事件的答案,我可以更改代码以在 ACTION_UP 事件中手动执行点击,如下所示:
((ViewGroup) this.getParent()).performClick();
我情不自禁,但我觉得这有点不满意。我有更优雅的解决方案吗?
【问题讨论】:
-
来自 Android 源代码:onTouchEvent 返回“如果事件已处理,则返回 True,否则返回 false。”尝试返回 false。
标签: android