如何在Android中建模关注/取消关注按钮? State List Drawable我在寻找什么?如何定义两种不同的状态?
答案 0 :(得分:1)
这在很大程度上取决于您想要达到的视觉效果。
首先,基础知识(我假设你已经知道了这一点):你需要一个Button
,setOnClickListener()
用于切换状态的监听器,以及一个保存它的地方(本地数据库,你的自己的服务器,或其他什么)。
最简单,最不吸引人的方法就是只要在"关注"之后切换按钮上的文字。状态更改(在单击侦听器中使用setText()
)。
可能的改进是拥有不同的按钮背景,因此外观也会发生变化(例如,从灰色星形变为黄色星形)。为此,您只需在点击监听器中调用setBackground()
。
对于更高级的效果,您可以使用TransitionDrawable
来交叉淡化此更改。然后startTransition()
和reverseTransition()
将用于两个状态更改。例如:
Drawable d1 = getResources().getDrawable(R.drawable.follow_button);
Drawable d2 = getResources().getDrawable(R.drawable.unfollow_button);
final TransitionDrawable followDrawable = new TransitionDrawable(new Drawable[] { d1, d2 });
final int transitionDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);
button.setBackground(followDrawable);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (!mFollowing)
{
mFollowing = true;
followDrawable.startTransition(transitionDuration);
}
else
{
mFollowing = false;
followDrawable.reverseTransition(transitionDuration);
}
}
});
答案 1 :(得分:0)
首先,您需要保存您的州。无论是“跟随”还是“取消关注”。保存位置取决于您的应用程序逻辑。
然后,根据当前状态,您可以更新按钮的外观。 StateListDrawable的作用是,它根据状态更新按钮的背景,无论是“聚焦”,“选择”等等。
您可以使用State List Drawable作为按钮的背景。然后,如果当前状态为“follow”,则将按钮设置为选中(vis Button.setSelected(true))。如果当前状态为“取消关注”,则表示正常。 (Button.setSelected(假)。
<item android:drawable="@drawable/bg_for_follow" android:state_selected="true" />
<item android:drawable="@drawable/bg_for_unfollow" />
像这样的东西。在上面的示例中,如果将该可绘制文件设置为按钮的背景,则当按钮状态为“已选中”时,它将使用“bg_for_follow”;当按钮状态正常时,它将使用“bg_for_unfollow”。
希望可以提供帮助。