两个动画中的一个不起作用

时间:2014-09-24 21:46:27

标签: android android-animation

我有一个隐藏在开始的视图(它可见但在屏幕下方,因此用户无法看到它),并且当用户第一次点击标记时,视图会显示动画并且用户可以看到它。当用户单击其他标记时,视图应向下移动(到屏幕下方的原始位置,隐藏),然后更改它具有的TextView文本,最后使用新信息再次向上移动。

一切正常,但是动画效果不佳;视图刚刚消失,再次向上运动。我尝试了动画和TranslateAnimation,结果相同。

这是我的代码:

@Override
public boolean onMarkerClick(Marker marker) {

    if (!anyMarkerSelected) {

        textViewNombre.setText(establecimiento.getNombreEstablecimiento());
        textViewDireccion.setText(establecimiento.getNombreVia());
        textViewDescripcion.setText(establecimiento.getNumeroVia());

        view.startAnimation(animationUp);
        animationUp.setFillAfter(true);

        mapa.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
        anyMarkerSelected = true;

        return true;

        } else {

        view.startAnimation(animationDown);  //This animation is not working
        animationDown.setFillAfter(true);

        textViewNombre.setText(establecimiento.getNombreEstablecimiento());
        textViewDireccion.setText(establecimiento.getNombreVia());
        textViewDescripcion.setText(establecimiento.getNumeroVia());

        view.startAnimation(animationUp);
        animationUp.setFillAfter(true);

        return true;
    }
}

动画的XML文件是:

<translate
    android:duration="200"
    android:fromXDelta="0"
    android:toYDelta="110%" />

<translate
    android:duration="200"
    android:fromXDelta="0"
    android:toYDelta="-110%" />

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你正在同时开始2个不同的动画,看起来它是默认为后者。你需要将它们都放入一个AnimationSet中并在你的向下动画上放置一个setStartOffset。

以下是一些示例代码:

//only takes an animation listener and with that you need implement all the methods
   public void doViewAnimationSet(){
    TranslateAnimation transTo= new TranslateAnimation(0, -mLittleChef.getX()/2, 0, 0);
    TranslateAnimation transBack= new TranslateAnimation(0, mLittleChef.getX()/2, 0, 0);
    transTo.setDuration(mShortAnimationDuration/2);
    transBack.setDuration(mShortAnimationDuration/2);
    transTo.setStartOffset(0);
    transBack.setStartOffset(transTo.getDuration());
    AnimationSet transSet= new AnimationSet(true);
    transSet.setInterpolator(new LinearInterpolator());
    transSet.addAnimation(transTo);
    transSet.addAnimation(transBack);
    transSet.setAnimationListener(new AnimationListener(){
        @Override
        public void onAnimationEnd(Animation animation) {
            simpleLock= false;
        }


        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub
        }


        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }
    });
    mLittleChef.startAnimation(transSet);
    //another way to start your set animation:
    //set.setTarget(mLittleChef);
    //set.start();
}

您可以阅读更多内容:here

答案 1 :(得分:0)

您还在以下行中出现拼写错误:   textViewDireccion.setText(establecimiento.getNombreVia());

应该是:

textViewDirection与Direccion ..