Android : Get view only on which touch was released

别等时光非礼了梦想. 提交于 2020-01-10 04:26:04

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!