Android TranslateAnimation在动画后重置

mon*_*nja 27 animation android

我正在创建类似SlideDrawer的东西,但是大多数自定义,基本上这个东西都在工作,但动画最后会闪烁.

为了进一步解释,我得到了一个TranslateAnimation然后在这个动画之后它返回到原始位置,如果我设置了setFillAfter,那么布局内的按钮就会停止工作.如果我听onAnimationEnd并将其他布局设置为View.GONE布局fickers.从它的判断来看,在动画结束时,视图会在调用View.GONE之前返回到原始位置.

任何建议都会很棒.谢谢

Soh*_*ham 45

是与此问题相关的实际错误

这基本上表明onAnimationEnd(...)当AnimationListener附加到Animation时,该方法不能很好地工作

解决方法是在要将动画应用到的视图中侦听动画事件.例如,如果最初将动画侦听器附加到动画上,就像这样

mAnimation.setAnimationListener(new AnimationListener() {
    @Override
    public void onAnimationEnd(Animation arg0) {
                       //Functionality here
    }
Run Code Online (Sandbox Code Playgroud)

然后将动画应用于ImageView此类动画

mImageView.startAnimation(mAnimation);
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您现在必须创建自定义 ImageView

public Class myImageView extends ImageView {
Run Code Online (Sandbox Code Playgroud)

然后覆盖View类的onAnimationEnd方法并提供其中的所有功能

@Override
protected void onAnimationEnd() {
    super.onAnimationEnd();
    //Functionality here
}
Run Code Online (Sandbox Code Playgroud)

这是此问题的正确解决方法,提供over-riden View - > onAnimationEnd(...)方法中的功能,而不是onAnimationEnd(...)附加到Animation的AnimationListener方法.

这样可以正常工作,并且在动画结束时不再有任何闪烁.希望这可以帮助


jul*_*jul 25

从API 11开始,您可以使用ObjectAnimator实际更改视图属性的,即在转换的情况下,视图将保留在动画后到达的位置.

ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(mContent_container, "translationX", startX, endX);
objectAnimator.setDuration(1000);
objectAnimator.start();
Run Code Online (Sandbox Code Playgroud)

更多这里.