Android 在翻译过程中在编辑文本之间切换文本

Android 在翻译过程中在编辑文本之间切换文本,android,animation,Android,Animation,我有一个垂直方向的LinearLayout(在ScrollView中),用于保存动态创建的视图。每个视图都包含一个EditText。作为一个选项,我希望用户能够重新排序这些视图 对于重新排序,我提供了一个向上和向下按钮。这很有效。动画是平滑的,并提供预期的输出 设置: static TranslateAnimation translate(float fromX, float toX, float fromY,

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

对于重新排序,我提供了一个向上和向下按钮。这很有效。动画是平滑的,并提供预期的输出

设置:

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;
}
动画只是一个视觉反馈:我没有对视图重新排序。我只是在两个文本之间切换数据。例如:

View1 ==== EditText1 ==== TextData1
View2 ==== EditText2 ==== TextData2
动画结束时:

View1 ==== EditText1 ==== TextData2
View2 ==== EditText2 ==== TextData1
问题:

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;
}
我当前正在切换动画端(动画)中的
EditText.getText().toString()
值。这一点都不顺利。我能做的最好的描述就是:
闪烁
。值切换时会闪烁

有没有办法避免这种情况

翻译形象:

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

你的问题激发了我的好奇心,所以我设置了一个虚拟项目来测试你正在尝试做什么,实际上我看到了一个闪烁

我通过在onAnimationEnd方法中添加以下代码来解决此问题:

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

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

tb1.setAnimation(null);
tb2.setAnimation(null); 
在两个EditText中将动画设置为null似乎可以解决闪烁问题


希望这有帮助

谢谢你,这只需要一个小改动就可以了:在设置文本之前,我调用了
view.setAnimation(null)
。之后再打电话仍然会产生闪烁。如果您能解释一下为什么会这样做,我将不胜感激。虽然我不能完全确定,但我要说的是,在调用onAnimationEnd后不久,Android运行时正在清除并还原视图的矩阵,因此,文本将发生更改,过一会儿,视图将移回。将动画设置为null将强制矩阵当场还原。另外,这里的代码顺序对您不起作用,这很奇怪。。。这对我很管用。奇怪,我明白了。这是有道理的。不确定(轻微)修改为何有效。从你的解释来看,似乎特别不应该。对我来说,现在再尝试一次已经太晚了。而且,我可能在测试这两个场景时搞砸了。无论如何,这是非常有帮助的。再次感谢。