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
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