我有一个垂直方向的 LinearLayout(在 ScrollView 内),它包含动态创建的视图。这些视图中的每一个都包含一个 EditText。作为一个选项,我希望用户能够重新排序这些视图。
对于重新排序,我提供了一个向上和向下按钮。这很好用。动画很流畅,并给出了预期的输出。
设置:
动画只是一个视觉反馈:我没有重新排序视图。我只是在两个 EditText 之间切换数据。例如:
View1 ==== EditText1 ==== TextData1
View2 ==== EditText2 ==== TextData2
动画结束时:
View1 ==== EditText1 ==== TextData2
View2 ==== EditText2 ==== TextData1
问题:
我目前正在EditText.getText().toString()
切换onAnimationEnd(Animation)
. 这一点都不顺利。我能做的最好的描述效果:flicker
。切换值时会闪烁。
有没有办法避免这种情况?
翻译动画:
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);