【发布时间】:2011-02-16 00:13:27
【问题描述】:
我有一个带有几个 ImageView 的栏,每个都用作一个按钮(通过使用 OnClickListener)。现在我想要实现的是当用户按下图像时,图像周围会出现某种发光效果(就像你在 iPhone 上按下 barButton 时一样)。
这可能吗?
【问题讨论】:
标签: android animation imageview
我有一个带有几个 ImageView 的栏,每个都用作一个按钮(通过使用 OnClickListener)。现在我想要实现的是当用户按下图像时,图像周围会出现某种发光效果(就像你在 iPhone 上按下 barButton 时一样)。
这可能吗?
【问题讨论】:
标签: android animation imageview
这是可能的。实现这一点的正确方法是定义一个StateList Drawable。
statelist 为每个状态定义了一个单独的可绘制对象。
例如,下面的 xml 定义了一个可绘制对象,如果按钮被按下则显示 blue_button_pressed 可绘制对象,而在所有其他情况下则显示 blue_button_active 可绘制对象。
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/blue_button_pressed"/>
<item
android:drawable="@drawable/blue_button_active"/>
</selector>
您可以像任何其他图像一样将此文件放在可绘制文件夹中,并像任何其他可绘制图像一样在布局文件中引用它。
【讨论】:
尽管出于某种原因,大多数视图实际上并没有为可动画的 Drawable 设置动画。为此,您必须通过在AnimationDrawable(或Animatable,就此而言)调用start() 方法来手动启动动画。
由于某些奇怪的原因,您不能在将 Drawable 设置为 View 后立即执行此操作。相反,您可以尝试将 start 调用发布到 Handler,以便在 Drawable 的初始设置与其动画开始之间有一段时间。
还没来得及找出它为什么会这样,但这是我最终不得不做的。
【讨论】:
您可以手动将此发光效果生成为背景图片,并使其在单击时显示为实际图像后面的父视图。但我认为没有任何本机功能。
【讨论】: