Java 触摸物品时如何设置自定义背景色?
我基本上想在触摸列表项时自定义其背景色。我写了一篇很累的听众文章,但是我犯了一些错误或者误解了这些行为的概念Java 触摸物品时如何设置自定义背景色?,java,android,background-color,Java,Android,Background Color,我基本上想在触摸列表项时自定义其背景色。我写了一篇很累的听众文章,但是我犯了一些错误或者误解了这些行为的概念 v.setOnTouchListener( new TextView.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN:
v.setOnTouchListener( new TextView.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setBackgroundColor(Color.RED);
break;
case MotionEvent.ACTION_UP:
v.setBackgroundColor(Color.WHITE);
break;
}
return false;
}
}
);
默认颜色为浅蓝色。我想为每个列表项更改它。
此代码在触摸时将项目颜色更改为红色,但之后不会再更改。使用statelistdrawable。你可以在所有地方找到例子,包括Android开发者网站。你是否也尝试捕获
操作\u取消
所以
我认为ListView正在感知触摸事件,因为它开始滚动。因此,您永远不会得到一个up操作,而是一个cancel操作(我假设)。但最好使用颜色状态…在color文件夹中创建一个文件mycolors.xml,其中包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ff0000"/> <!-- pressed -->
<item android:color="#ffffff"/> <!-- default -->
</selector>
然后,稍后您可以像这样设置视图的背景:在布局xml中的android:background=“@color/mycolors”,或者以编程方式像这样设置:v.setBackgroundColor(getResources().getColor(R.color.mycolors)
在这种情况下,不需要点击或触摸监听器……一切都会神奇地发生
更多信息:关键点是,您可以使用
StateListDrawable states=new StateListDrawable();states.addState(new int[]{android.R.attr.state_pressed},new ColorDrawable(color));
android:background=“@color/mycolors”
对我不起作用!膨胀布局时会导致异常。@AlirezaMirian这是因为在这种情况下,android:color
实际上应该是android:drawable
。您应该按此处所述返回true:。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ff0000"/> <!-- pressed -->
<item android:color="#ffffff"/> <!-- default -->
</selector>