【问题标题】:Android : Get view only on which touch was releasedAndroid:仅查看已释放触摸的视图
【发布时间】:2013-03-24 04:38:56
【问题描述】:

我的情况很棘手,希望您能帮助我。我有几个视图(TextViews),在线性布局中一个接一个地水平放置。当我按下 textview1 时,将手指拖动到任何其他 textview 并释放触摸,我希望能够获得抬起手指的视图(textview)。

我查看了 TouchListener api,它说每个事件都以 ACTION_DOWN 事件动作开始。由于其他文本视图不会触发该事件,我怎样才能获得对我抬起手指的文本视图的引用?我什至试过了,action_up 只会在触发 action_down 事件的 textView 上触发。

    @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;
}

非常感谢任何帮助。谢谢

【问题讨论】:

  • 尝试获取滚动位置
  • 即使我得到了位置点,我将如何获得包含该点的文本视图?

标签: android drag touch-event ontouchlistener motionevent


【解决方案1】:

您需要在 LinearLayout 中处理所有触摸事件并检查子视图的位置(child.getLeft() 和 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多