从其他视图拖动时检测视图上的触摸事件 [英] Detect touch event on a view when dragged over from other view
问题描述
如果用户触摸视图 A 并拖动到视图 B 的底部,我如何检测触摸事件.我想检测视图 B 中的触摸事件.
How do I detect the touch event if the user touches on view A and drags to bottom over the view B. I want to detect the touch event in View B.
我在视图 B 中添加了触摸侦听器,但如果用户最初触摸 A 并将其拖过 B,则不会收到事件.
I added touch listener in view B but doesn't receive events if the user initially touched A and dragged over the B.
推荐答案
您可以使用下面的代码来实现您的请求:
You can use the code bellow to achive your request:
测试视图边界的方法(在下面的代码中使用)
Method to test view bounds (used in code beloow)
Rect outRect = new Rect();
int[] location = new int[2];
private boolean isViewInBounds(View view, int x, int y){
view.getDrawingRect(outRect);
view.getLocationOnScreen(location);
outRect.offset(location[0], location[1]);
return outRect.contains(x, y);
}
使用两个 TextView
final TextView viewA = (TextView) findViewById(R.id.textView);
final TextView viewB = (TextView) findViewById(R.id.textView2);
设置视图A
需要空的 OnClickListener
以保持 OnTouchListener
活动直到 ACTION_UP
The empty OnClickListener
is required to keep OnTouchListener
active until ACTION_UP
viewA.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {}
});
viewA.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int)event.getRawX();
int y = (int)event.getRawY();
if(event.getAction() == MotionEvent.ACTION_UP){
if(isViewInBounds(viewB, x, y))
viewB.dispatchTouchEvent(event);
else if(isViewInBounds(viewA, x, y)){
Log.d(TAG, "onTouch ViewA");
//Here goes code to execute on onTouch ViewA
}
}
// Further touch is not handled
return false;
}
});
设置视图B
这仅在您还想按 viewB 并拖动到 viewA 时才需要
This is only required if you also want to press on viewB and drag to viewA
viewB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {}
});
viewB.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int)event.getRawX();
int y = (int)event.getRawY();
if(event.getAction() == MotionEvent.ACTION_UP){
if(isViewInBounds(viewA, x, y))
viewA.dispatchTouchEvent(event);
else if(isViewInBounds(viewB, x, y)){
Log.d(TAG, "onTouch ViewB");
//Here goes code to execute on onTouch ViewB
}
}
// Further touch is not handled
return false;
}
});
问候.
这篇关于从其他视图拖动时检测视图上的触摸事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!