我有一个垂直导向的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);
答案 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似乎可以解决闪烁问题。
希望这有帮助!