0

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

示例代码:

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

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

您能否就如何使交换对用户更明显提出一些建议。抱歉,由于我是这个论坛的新手,所以无法发布图片。 应用程序的图像抓取

在此先感谢您的帮助。!

4

1 回答 1

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% 有效,所以为了获得更多支持,请阅读动画

<?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);

希望能帮助到你!

于 2012-08-26T12:45:49.480 回答