Android 按钮 setColorFilter 行为

标签 android button

(我稍微改变了问题,因为现在问题更清楚了)

我的应用程序上有 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/

相关文章:

android - 我们如何在整个 Activity 中动态地从一个主题切换到另一个主题

c# - 从连接到远程 MySQL 数据库的 PHP 服务检索/获取数据以显示到我的 ASP.Net Web 应用程序

android - 没有 @PrimaryKey 的 RealmObject 无法更新

java - 将图像绘制为按钮的背景或使用 Java2D 绘制它更好/更快吗

java - Android 多层次解析 JSON 对象

android - Exoplayer,同步播放音频流和视频流?

c# - 如何使用mvvm模式更改标签内容

python - 将函数绑定(bind)到 Kivy 按钮

java - Android:从按钮设置文本,其中按钮文本由字符串给出

c# - 在 C# 中的一个操作中处理多个按钮操作