【问题标题】:OnLongCLickListener is not working as I needOnLongCLickListener 没有按我的需要工作
【发布时间】:2017-07-13 01:49:13
【问题描述】:

我有一个TextView,有一个onLongClickListenerOnClick事件,在持有TextView时,它的颜色变为红色,在释放时,它的颜色应该变为白色。

问题: 当我握住TextView 并在握住的同时将手指移出它,然后离开手指,它的颜色不会变为白色。

XML

<TextView
    android:layout_width="match_parent"
    android:text="hello"
    android:textColor="#ffff"
    android:id="@+id/timer"
    android:layout_height="wrap_content"
    />

Java

final TextView t1 = (TextView) findViewById(R.id.timer);
    t1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            t1.setTextColor(Color.WHITE);

        }
    });
    t1.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            t1.setTextColor(Color.RED);
            return false;
        }
    });

【问题讨论】:

  • 你试过在 onLongClick() 上返回 true 吗?
  • 您应该使用 OnTouchListener 来实现所需的功能
  • @Abhishec Kumar 我的回答将帮助您解决您的问题^_^ 如果您需要清除一些您可以询问的问题

标签: java android onlongclicklistener


【解决方案1】:

View.OnClickListener - 单击视图时要调用的回调的接口定义。 View.OnLongClickListener - 当视图被点击并保持时调用回调的接口定义。

所以你所说的是 100% 正确的。它应该是红色的,因为它被点击并保持为你所做的方式。

但是当我按住文本视图并将手指移到文本视图之外时 握着,然后离开我的手指,它的颜色没有变 白色

当文本视图仅被点击时,您已经为文本视图赋予了白色!如果你想像你说的那样得到那个白色(点击并按住时),你需要在 OnLongClickListener

中设置白色

如果您想检测您的视图触摸和释放并更改与之相关的颜色,那么您需要使用 OnTouchListener 而不是 clickListeners

View.OnTouchListener - 将触摸事件分派到此视图时要调用的回调的接口定义。在将触摸事件提供给视图之前调用回调

       t1.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch ( event.getAction() ) {
                case MotionEvent.ACTION_DOWN:
                    t1.setTextColor(Color.RED); // pressed state
                 break;

                case MotionEvent.ACTION_UP:
                    t1.setTextColor(Color.WHITE); // Released state
                 break;
            }
            return true;
        }
    });

【讨论】:

【解决方案2】:

分配一个 onTouch 监听器并寻找 MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE:

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
       // Construct a rect of the view's bounds
       rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    }

    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        if (!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())) {
            // User moved outside bounds
            t1.setTextColor(Color.WHITE);
        }
    }
    return false;
}

【讨论】:

    【解决方案3】:

    使用OnTouchListener 这样您就可以注册触地和向上事件。 MotionEvent case MotionEvent.ACTION_DOWN: 将在用户触摸您的TextView 时将颜色设置为红色,而case MotionEvent.ACTION_UP: 将在用户将手指从TextView 上移开时将颜色设置为白色。

    final TextView t1 = (TextView) findViewById(R.id.timer);
    
    
    t1.setOnTouchListener(new View.OnTouchListener()
        {
    
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
            switch (event.getAction()) {
    
            case MotionEvent.ACTION_DOWN:
                t1.setTextColor(Color.RED);
                break; 
            case MotionEvent.ACTION_UP:
                t1.setTextColor(Color.WHITE);
                break;
        }
    return true;
            }
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      相关资源
      最近更新 更多