OnLongCLickListener不工作,因为我需要
我有一个TextView
,具有onLongClickListener
和OnClick
事件,对控股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;
}
});
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;
}
});
它的工作,谢谢 –
@Abhishec库马尔我看到你虽然返回false这是为了额外的知识http://*.com/questions/21578476/what-actually-happens-if-i-return-false-in-a-ontouchlistener –
使用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;
}
});
加入一个onclick正在工作 –
感谢哥们,为代码 –
分配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;
}
你尝试过在你的onLongClick返回true()? – dave
你应该使用OnTouchListener来实现所需的功能 –
@Abhishec Kumar我的答案将帮助你解决你的问题^ _ ^如果你需要清除一些你可以问的问题 –