Android:按钮在翻译动画后无效

时间:2015-08-05 02:41:15

标签: android animation button

我创建了一个按钮,我想在按下时将其翻译下来。我在anim文件夹中创建了一个xml文件来设置向下翻译。

翻译有效但按钮会在动画结束时恢复到原始位置。为了解决这个问题,我使用了代码:

$this->call()

虽然完成翻译动画后按钮仍然保持在其位置,但是当它再次按下时它停止工作并且不会从该位置向下翻转。

每次按下按钮时如何使按钮平移?

编辑:

根据要求,以下是翻译代码,存储在translationDown.setFillAfter(true); translationDown.setFillEnabled(true);

translate_down.xml

这是我的java文件中的代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:fromYDelta="0"
        android:toYDelta="300"
        android:duration="250"
        />

</set>

3 个答案:

答案 0 :(得分:1)

这是因为动画使用视图的表示(位图副本)(即按钮)。当动画正在进行时,位图复制而非您的视图正在翻译。动画完成后,您的实际视图尚未移动。

使用translationDown.setFillAfter(true)和translationDown.setFillEnabled(true)将无济于事,因为这些是用于动画链接的,即如果你想用另一个动画对象继续动画。

您需要做的是在动画后设置视图的位置属性。以下是如何实现这一目标的示例:

final Animation slideDown = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate_down);
relativeLayoutButtons.startAnimation(slideDown);


relativeLayoutButtons.getAnimation().setAnimationListener(new Animation.AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {

                        }

                        @Override
                        public void onAnimationEnd(Animation animation) {

                            // Set the position properties of your view here.
                            // e.g.
                            relativeLayoutButtons.setTranslationX(50);
                            relativeLayoutButtons.setTranslationY(50);
                        }

                        @Override
                        public void onAnimationRepeat(Animation animation) {

                        }
                    });

答案 1 :(得分:0)

好吧,我打赌你可以使用ontouch()代替onClick()。一旦你改变Button位置,我认为它只能在原始位置上点击。

尝试以下内容。

Button bt = (Button) findViewById(R.id.button);

bt.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event){
        switch(event.getAction())
        {
            case MotionEvent.ACTION_UP :
            {
                // Do whatever you want here.
            }
        return true;
}});

答案 2 :(得分:0)

旧动画API只是移动视图的绘图,但不移动实际视图位置。 因此,按下翻译的视图没有响应(实际上视图仍处于原始位置。)

使用新的Animator API。此API移动实际视图位置。

view.animate().translationY(300).setDuration(250).start();

请参阅this google's blog post了解相关信息。