dca*_*121 19 android ontouchlistener android-view
如果用户触摸视图A并在视图B上拖动到底部,如何检测触摸事件.我想在视图B中检测触摸事件.
我在视图B中添加了触摸侦听器,但如果用户最初触摸A并拖过B,则不会接收事件.

Lui*_*uis 62
您可以使用下面的代码来实现您的请求:
测试视图边界的方法(用于代码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);
}
Run Code Online (Sandbox Code Playgroud)
用两个测试 TextView
final TextView viewA = (TextView) findViewById(R.id.textView);
final TextView viewB = (TextView) findViewById(R.id.textView2);
Run Code Online (Sandbox Code Playgroud)
设置视图A.
空白OnClickListener是必须保持OnTouchListener活跃,直到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;
}
});
Run Code Online (Sandbox Code Playgroud)
设置视图B.
仅当您还要按viewB并拖动到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;
}
});
Run Code Online (Sandbox Code Playgroud)
问候.
| 归档时间: |
|
| 查看次数: |
21623 次 |
| 最近记录: |