问题
I am in a tricky situation, hope you can help me with it. I have few views (TextViews), horizontally placed one after another in a linear layout. When I press on textview1, drag my finger to any other textview and release touch, I want to be able to get the view(textview) on which the finger was lifted.
I went over the TouchListener api, it says that every event starts with a ACTION_DOWN event action. Since other textviews won't fire that event, how can I get the reference to the textViews on which I lifted my finger? I tried it even, and the action_up would fire only on the textView that fired the action_down event.
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_UP:
Log.i(TAG, "ACTION_UP");
Log.i(TAG, ((TextView) v).getText().toString());
break;
case MotionEvent.ACTION_DOWN:
Log.i(TAG, "ACTION_DOWN");
Log.i(TAG, ((TextView)v).getText().toString());
break;
}
return true;
}
Any help is greatly appreciated. Thank you
回答1:
You need to handle all your touch events in the LinearLayout and check the location of the child views (child.getLeft() and child.getRight()).
public boolean dispatchTouchEvent(MotionEvent event){
int x = event.getX();
int cc = getChildCount();
for(int i = 0; i < cc; ++i){
View c = getChildView();
if(x > c.getLeft() && x < c.getRight()){
return c.onTouchEvent(event);
}
}
return false;
}
来源:https://stackoverflow.com/questions/15595220/android-get-view-only-on-which-touch-was-released