在TranslateAnimation期间在EditTexts之间切换文本

时间:2013-10-03 07:25:07

标签: android animation

我有一个垂直导向的LinearLayout(在ScrollView中),它包含动态创建的视图。每个视图都包含一个EditText。作为一种选择,我希望用户能够重新排序这些视图。

对于重新排序,我提供了一个UP和DOWN按钮。这非常有效。动画流畅,并提供预期的输出。

设定:

动画只是一种视觉反馈:我 NOT 重新排序视图。我只是在两个EditTexts之间切换数据。例如:

View1 ==== EditText1 ==== TextData1
View2 ==== EditText2 ==== TextData2

动画结束时:

View1 ==== EditText1 ==== TextData2
View2 ==== EditText2 ==== TextData1

问题:

我目前正在EditText.getText().toString()中切换onAnimationEnd(Animation)值。这根本不顺利。我能做的最好的描述效果:flicker。切换值时会出现闪烁。

有什么方法可以避免这种情况吗?

TranslateAnimation:

static TranslateAnimation translate(float fromX, float toX, float fromY, 
                                                            float toY, int ms) {

    TranslateAnimation transAnim = new TranslateAnimation(fromX, toX, fromY, toY);
    transAnim.setDuration(ms);
    return transAnim;
}

动画的应用方式:

// Animate viewToMove to move to viewToReplace's position
TranslateAnimation ta = Utils.translate(0, 0, 0, -viewToReplace.getHeight(), 2000);

// Animate viewToReplace to move to viewToMove's position
TranslateAnimation ta2 = Utils.translate(0, 0, 0, viewToMove.getHeight(), 2000);

// AnimationListener
ta.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) { }

    @Override
    public void onAnimationRepeat(Animation animation) { }

    @Override
    public void onAnimationEnd(Animation animation) {

        // Grab the text that is held by viewToMove's EditText
        String temp = ((EditText) 
                     (viewToMove.findViewById(R.id.etListItemText))).getText().
                                       toString();

        // Set viewToMove's EditText to show contents of viewToReplace's EditText
        ((EditText) (viewToMove.findViewById(R.id.etListItemText))).
                              setText(((EditText) (viewToReplace.
                                     findViewById(R.id.etListItemText))).
                                                   getText().toString());

        // Set viewToReplace's EditText contents
        ((EditText) (viewToReplace.findViewById(R.id.etListItemText))).
                                     setText(temp);
    }
});

// Start animations
viewToMove.startAnimation(ta);
viewToReplace.startAnimation(ta2);

1 个答案:

答案 0 :(得分:3)

你的问题引起了我的好奇心,所以我设置了一个虚拟项目来测试你想要做什么,确实我看到了一个闪烁。

我设法通过在myAnimationEnd方法中放入以下代码来解决它:

String text1 = tb1.getText().toString();
String text2 = tb2.getText().toString();

tb1.setText(text2);
tb2.setText(text1);     

tb1.setAnimation(null);
tb2.setAnimation(null); 

在两个EditTexts中将动画设置为null似乎可以解决闪烁问题。

希望这有帮助!