我正在开发一个客户端在Android 2.2.2的申请,他要做到以下几点:
现在我有一个onClick事件的按钮,但他不喜欢,他想dectect当用户释放按钮。
我发现View.OnTouchListener我认为这就是我需要使用,但是,没有任何posibility添加此事件为xml就像我的onClick做?
<ImageButton
android:id="@+id/btnSaveNewGate"
android:layout_width="@dimen/btnSaveNewGate_width"
android:layout_height="@dimen/btnSaveNewGate_height"
android:layout_below="@+id/radioGrGateType"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onSaveNewGateClick"
android:scaleType="fitXY"
android:src="@drawable/save_gate_selector" />
我有两个问题更多:
这是相关联的事件,当用户释放他的手指?
是否有禁止任何指引使用View.OnTouchListener
代替onClick
?
当用户释放他的手指的事件是MotionEvent.ACTION_UP
。 我不知道是否有使用View.OnTouchListener代替的onClick(),禁止任何指引,很可能它取决于形势。
下面是一个示例代码:
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
// Do what you want
return true;
}
return false;
}
});
据推测,如果想使用OnTouchListener
而非OnClickListener
,那么的额外功能OnTouchListener
是必要的。 这是一个补充的答案,显示的是如何更详细OnTouchListener
可以使用。
定义监听器
将这个地方你的活动或片段。
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
设置监听器
设置在收听者onCreate
(一个活动)或onCreateView
(为一个片段)。
myView.setOnTouchListener(handleTouch);
笔记
-
getX
和getY
给你的坐标相对于视图(即视图的左上角)。 以上或您的视图的左侧移动时,它们将是负面的。 使用getRawX
和getRawY
如果你想绝对的屏幕坐标。 - 您可以使用
x
和y
值来确定的事情,例如滑动方向。
当用户释放按钮的OnClick被触发。 但是,如果你仍然想使用TouchListener你需要将其添加到代码。 只是:
myView.setOnTouchListener(new View.OnTouchListener()
{
// Implementation;
});