这可能是一个非常简单的问题,我有一个动态添加的片段。片段有一个带有单击事件的按钮,可以在x轴上为视图+50设置动画,在y轴上设置+50。
动画效果很好,但问题是我在动画后单击按钮时它没有工作但是点击事件仍然保留在原始位置。如果这没有意义,我会发布一个链接到youtube视频,显示正在发生的事情。我很好奇是否有需要刷新的东西?
https://www.youtube.com/watch?v=TLaS6u5v4m0
这是我的代码:
public class AnimationFragment extends Fragment {
public AnimationFragment() {
// Required empty public constructor
}
View view;
float curX, curY, newX, newY;
boolean animating = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
curX = 0; curY = 0;
view = inflater.inflate(R.layout.fragment_animation, container, false);
// get the button and add the onclick event
Button animateButton = (Button)view.findViewById(R.id.animateButton);
//
if (null != animateButton) {
animateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animateButtonClick(v);
}
});
}
return view;
}
public void animateButtonClick(View view) {
// wait for the animation to be complete
if (animating) return;
animating = true;
// get the new x and new y
newX = curX + 50.0f;
newY = curY + 50.0f;
// get the layout that will be animated
final RelativeLayout animationFragment = (RelativeLayout)getView().findViewById(R.id.animationFragment);
Animation slide = new TranslateAnimation(
Animation.ABSOLUTE,curX,
Animation.ABSOLUTE, newX,
Animation.ABSOLUTE, curY,
Animation.ABSOLUTE, newY);
// add other animation attributes
slide.setDuration(400);
slide.setFillAfter(true);
slide.setFillEnabled(true);
// start the animation
animationFragment.startAnimation(slide);
slide.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// nothing
}
@Override
public void onAnimationEnd(Animation animation) {
// make the view enable
animating = false;
// sets the new x and new y
curX = newX;
curY = newY;
}
@Override
public void onAnimationRepeat(Animation animation) {
// nothing
}
});
}
}
答案 0 :(得分:0)
尝试不用:
slide.setFillAfter(true);
slide.setFillEnabled(true);
从文档中,setFillEnabled
如果fillEnabled为true,则动画将应用值 fillBefore
setFillAfter
如果fillAfter为true,则表示此动画执行的转换 它会在完成后继续存在。
首先尝试不使用,如果它有效,并且您希望它之前发生,请删除两个setFillAfter() / setFillEnabled()
方法。如果您希望在之后发生,请仅使用setFillAfter(true)