OnLongCLickListener无法正常工作

时间:2017-02-22 20:05:00

标签: java android onlongclicklistener

我有TextViewonLongClickListenerOnClick事件,持有TextView,颜色变为红色,释放后,其颜色应该是变成白色。

问题: 当我按住TextView并在按住时将手指移到手指外,然后离开我的手指,其颜色不会变为白色。

XML

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

爪哇

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用OnTouchListener这样可以注册触摸和向上事件。当用户触摸case MotionEvent.ACTION_DOWN:时,MotionEvent 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;
        }
   });

答案 2 :(得分:0)

分配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;
}