我想要的效果其实就是类似listview那样,每个项,单击时会变一下颜色,让人知道已经点击生效了。
不过我没用listview,是一些textview纵向排列的
每个textview的onclick事件里我这么设定来改变颜色public void onClick(View view)
{
TextView textView=(TextView)view;
Drawable background=textView.getBackground();
textView.setBackgroundColor(0xFFCECECE);
............
打开一个新的窗口
textView.setBackgroundDrawable(background);
//如果不写最后一行setBackgroundDrawable的话,是可以改变颜色的,这行代码是要恢复到原来的颜色
}
感觉这样应该是可以的吧
但是实际执行时,单击这个textview的话,背景颜色是不会有任何变化的。
请问这是为什么
不过我没用listview,是一些textview纵向排列的
每个textview的onclick事件里我这么设定来改变颜色public void onClick(View view)
{
TextView textView=(TextView)view;
Drawable background=textView.getBackground();
textView.setBackgroundColor(0xFFCECECE);
............
打开一个新的窗口
textView.setBackgroundDrawable(background);
//如果不写最后一行setBackgroundDrawable的话,是可以改变颜色的,这行代码是要恢复到原来的颜色
}
感觉这样应该是可以的吧
但是实际执行时,单击这个textview的话,背景颜色是不会有任何变化的。
请问这是为什么
至于你这个功能,可以用Timer实现。 设定比如500ms后再改一次。
你说了这个渲染机制我就明白了
我还按windows平台的用法来搞,以为会实时渲染修改属性,两次修改背景色属性就行了。
当event.getAction() == MotionEvent.ACTION_DOWN,改变背景颜色
当event.getAction() == MotionEvent.ACTION_UP,还原背景颜色
你可能是没更新textView.setBackgroundColor(0xFFCECECE);
textView.invalidate();
............
打开一个新的窗口
textView.setBackgroundDrawable(background);试试
如果还不行可能是打开新窗口太快了,刷新后用sleep延迟一下
textview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Drawable background=textview.getBackground();
if(event.getAction() == MotionEvent.ACTION_DOWN){
textview.setBackgroundColor(0xFFCECECE);
}
if(event.getAction() == MotionEvent.ACTION_UP){
textview.setBackgroundDrawable(background);
}
return true;
}
});
5楼的兄台,你看我这写的有问题吗?为什么我鼠标点下去textview变了颜色,但是鼠标离开他不返回原来的颜色呢?我用了textview.invalidate();也没效果....求指点~~
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN) {
testView.setBackgroundDrawable();
return true;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
testView.setBackgroundDrawable ();
return false;
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Drawable background=textview.getBackground();
if(event.getAction() == MotionEvent.ACTION_DOWN){
textview.setBackgroundColor(0xFFCECECE);
//textview.setBackgroundDrawable();
return true;
}
if(event.getAction() == MotionEvent.ACTION_UP){
textview.setBackgroundColor(000000);
return false;
}
return false;
}
android:background="@drawable/my_button_click"
背景就调用这个my_button_click,这是自己写的一个XML
XML的类容就是下边的,你可以改成颜色或者图片用
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/login_button_sel" android:state_focused="true"/>
<item android:drawable="@drawable/login_button_sel" android:state_pressed="true"/>
<item android:drawable="@drawable/login_button_sel" android:state_selected="true"/>
<item android:drawable="@drawable/loginbutton"/>
</selector>
按下,然后移动到别的地方抬起手指,再触发OnTouch的up事件时,跟这个textview没一点关系了,背景色不会改回来了