2017-02-22 68 views
2

我有一个TextView,具有onLongClickListenerOnClick事件,对控股TextView,它的颜色变为红色,并且在释放,它的颜色应该变为白色。OnLongCLickListener不工作,因为我需要

问题: 当我握住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; 
     } 
    }); 
+0

你尝试过在你的onLongClick返回true()? – dave

+0

你应该使用OnTouchListener来实现所需的功能 –

+0

@Abhishec Kumar我的答案将帮助你解决你的问题^ _ ^如果你需要清除一些你可以问的问题 –

回答

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

它的工作,谢谢 –

+0

@Abhishec库马尔我看到你虽然返回false这是为了额外的知识http://stackoverflow.com/questions/21578476/what-actually-happens-if-i-return-false-in-a-ontouchlistener –

0

使用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; 
     } 
    }); 
+0

加入一个onclick正在工作 –

+0

感谢哥们,为代码 –

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; 
} 
相关问题