我有一个屏幕,其中多个按钮使用相同的背景 Drawable。我在各种项目中使用了可重用的代码来添加一个 OnTouch 侦听器,该侦听器在触摸按钮时添加灰色滤光片。这通常可以正常工作,但在这种情况下,当按下任何按钮时,所有按钮都会着色。
我在http://developer.android.com/guide/topics/graphics/2d-graphics.html中看到了解释:
注意:项目中的每个唯一资源只能保持一种状态,无论您可以为其实例化多少不同的对象。例如,如果您从同一个图像资源中实例化两个 Drawable 对象,然后更改其中一个 Drawable 的属性(例如 alpha),那么它也会影响另一个。
建议的解决方案是使用 TweenAnimation,它似乎不适用于滤色器。
我还看到了Android: Cloning a drawable in order to make a StateListDrawable with filters,建议使用 drawable.getConstantState().newDrawable()。这似乎没有什么不同。我猜只要使用相同的物理图像文件,所有 Drawable 都会受到使用相同资源更改任何其他 Drawable 的影响。
除了创建第二个背景图像来显示按下状态之外,还有什么解决方案?如果有一个简单的编程解决方案可以添加到我的代码中并在每个项目中使用,那就太好了。