1

方法

使用补间视图动画。

预期结果

一个按钮,放置在原地A,一旦点击,它就会向右移动到 spot B。然后我当场点击那个按钮B,它向左移动到spot A

问题

首先点击spot A,按钮确实移动到spot B。然后点击点B没有响应,相反,它总是响应点击点A

主.java

package com.example.animationdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;

public class Main extends Activity {
    /** Called when the activity is first created. */

    boolean flagToggleButton = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener () {
            @Override
            public void onClick(View arg0) {
                if (flagToggleButton == false) {
                    Animation anim = AnimationUtils.loadAnimation(Main.this, R.anim.animation_move_right);
                    b.startAnimation(anim);
                    flagToggleButton = true;
                }
                else {
                    Animation anim = AnimationUtils.loadAnimation(Main.this, R.anim.animation_move_left);
                    b.startAnimation(anim);
                    flagToggleButton = false;
                }
            }
        });
    }
}

anim_move_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fillEnabled="true"
    android:fillAfter="true" >
    <translate
        android:duration="1000"
        android:fromXDelta="0%"
        android:toXDelta="200%"
        android:startOffset="0" />
</set>

anim_move_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fillEnabled="true"
    android:fillAfter="true" >
    <translate
        android:duration="1000"
        android:fromXDelta="0%"
        android:toXDelta="-200%"
        android:startOffset="0" />
</set>
4

2 回答 2

3

这就是TranslateAnimation工作原理,它不会将视图移动到您必须LayoutParams为您的Button设置的新位置,因此它实际上会移动到新位置,请查看链接以获取有关如何将视图移动到新位置的示例

于 2013-07-09T07:30:56.647 回答
0

在了解了有关fillEnabled、fillBefore 和 fillAfter的知识后,我找到了一种解决方法,类似于Muhammad Babar 的工作

res > 动画 > anim_view_move_rightward.xml

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

    <translate
        android:duration="800"
        android:fromXDelta="0%"
        android:toXDelta="80%"
        android:fillEnabled="true"
        android:fillBefore="false"
        android:fillAfter="false"
        android:startOffset="0" />

</set>
于 2013-07-09T07:04:40.353 回答