如何为Android Spinners设置动画?

时间:2012-08-25 10:06:20

标签: android android-animation android-spinner

我的应用程序是一个温度转换应用程序,因为我有两个微调器,一个将包含源度量标准列表,另一个将包含应用程序中的目标指标列表(显然从相同的数组适配器加载)我有一个交换按钮。交换按钮的功能是将源侧微调器指标更改为目标侧微调器指标,反之亦然。 即如果我在源微调器中选择了Celsius并且在目标微调器中选择了开尔文,并且如果我按下交换按钮,则将交换微调器中的度量标准名称(相应文本框中的值将根据新的源和目标计算公制)。

示例代码:

            int srcposn = sourceSpinner.getSelectedItemPosition();
            int tgtposn = targetSpinner.getSelectedItemPosition();
            sourceSpinner.setSelection(tgtposn);
            targetSpinner.setSelection(srcposn);

我的问题是,当我按下交换按钮时,交换正在进行,但是没有正确的动画表示交换已经发生。 当我把应用程序交给我的朋友时,他们无法确定交换是否真的发生了。即使我没注意到它:)。

您能否就如何让交换看起来更明显的用户提出一些建议。 对不起,由于我是这个论坛的新手,我无法发布图片。 Image grab of the App

提前感谢您的帮助。!

1 个答案:

答案 0 :(得分:0)

据我所知,在这种情况下不使用Android动画。要告诉用户按下按钮后某些值发生了变化,我通常会弹出一个Toast,这很简单有效。如果您不喜欢它的设计,您可以根据自己的需要进行定制。这一切都在我发送的链接(Toast)上进行了解释。

只需在按钮OnClickListener()中使用此功能:

int srcposn = sourceSpinner.getSelectedItemPosition();
int tgtposn = targetSpinner.getSelectedItemPosition();
sourceSpinner.setSelection(tgtposn);
targetSpinner.setSelection(srcposn);

Toast toast = Toast.makeText(
                    HomeActivity.this, 
                    "Units Successfully Changed", 
                    Toast.LENGTH_SHORT);
toast.show();

编辑:

然而,如果您喜欢像突出显示微调器一样的效果...... 我在网上找不到任何关于这个问题的好帮助,所以我遵循了ImageViews所做的基础知识。要为ImageViews设置动画,它会使用ImageSwitcher并创建2 ImageViews个等号,所以基本上这是相同的。我们的想法是创建两个新的Spinners,将它们与其他的顶部和左侧对齐,使用如下函数:

/**
 * Creates a new {@link Spinner} which overlays another
 * @param spinner {@link Spinner} to overlay
 * @return The new {@link Spinner}
 */
private Spinner createNewSpinner(Spinner spinner){
    LayoutParams spinnerParams = new LayoutParams(spinner.getWidth(), LayoutParams.WRAP_CONTENT);
    spinnerParams.addRule(RelativeLayout.ALIGN_TOP, spinner.getId());
    spinnerParams.addRule(RelativeLayout.ALIGN_LEFT, spinner.getId());

    Spinner overlaySpinner = new Spinner(HomeActivity.this);
    overlaySpinner.setLayoutParams(spinnerParams);

    return overlaySpinner;
}

对于效果,我认为你可以创建这样的东西,但我不确定它是否100%有效,以便更多支持阅读Animations

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
    android:background="@drawable/bg_orange"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fromAlpha="1.0" android:toAlpha="0.0"
    android:duration="400"
/>

要加载动画,您可以使用此代码,但因为您想要同时触发2 Spinners中的效果,我不确定您是否可以按照此想法执行所有操作。这就是我之前没有告诉你的原因。

Animation animation = AnimationUtils.loadAnimation(this, R.anim.disapear);
sourceSpinner.startAnimation(animation);

希望有所帮助!