(我稍微改变了问题,因为现在问题更清楚了)
我的应用程序上有 4 个按钮,当用户单击某个按钮时 我更改了该按钮的颜色。
单击按钮 3 时,我想将他的颜色更改为绿色,否则我想删除他的绿色滤镜(单击按钮 1/2/4 时)。 如果我点击按钮 3,它会得到绿色滤镜。如果然后我单击按钮 4,它会删除绿色过滤器,但如果我单击按钮 1 或 2,则没有任何反应。 当我在 XML 中切换按钮的位置,并将 button3 放在第一位时,它没有发生,想法?
布局xml的相关部分是:
<Button
android:id="@+id/ans1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/ans2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/ans3"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/ans4"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
代码是:
if (answer.equals("3"))
{
question.setText("In if");
d.setColorFilter(filter);
}
else
{
question.setText("else");
d.setColorFilter(null);
}
最佳答案
我似乎记得以前在创建太多 ColorFilters 时遇到过问题。听起来肯定不是这里的问题所在,因为它马上就会发生。不过,您可能会尝试将过滤器作为类变量,然后在 if/else block 中使用它。另外,正如 Trev 所提到的,由于您只想删除绿色滤镜,您可以将 null 传递给 setColorFilter 并避免制作透明滤镜,所以您最终会得到这样的结果:
//in main class
PorterDuffColorFilter greenFilter =
new PorterDuffColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP);
//in CheckAnswer()
Drawable d = findViewById(R.id.ans2).getBackground();
if(answer.equals("1") d.setColorFilter(greenFilter)
else d.setColorFilter(null);
关于Android 按钮 setColorFilter 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702521/