我有TextView
,onLongClickListener
和OnClick
事件,持有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;
}
});
答案 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;
}