如何平滑地动画2个视图?

时间:2014-08-08 16:15:59

标签: android animation

enter image description here

我有2个LinearLayout。让我们说它们是左面板主面板,如图所示。我正在使用动画隐藏左侧面板。这就是我使用的:

<scale
    android:duration="500"
    android:fromXScale="0.0"
    android:fromYScale="1.0"
    android:interpolator="@android:anim/linear_interpolator"
    android:toXScale="1.0"
    android:toYScale="1.0" />

我在主面板上使用 android:layout_toRightOf =&#34; @ + id / left_panel&#34; 将其保持在左侧面板的右侧。问题是当我使用动画隐藏左面板时,主面板只是跳到起点。当我使用动画再次显示左面板时,主面板跳转到终点。

那么我怎样才能顺利地将这两个观点合并在一起呢?

2 个答案:

答案 0 :(得分:1)

您可以使用幻灯片(平移)动画来代替使用缩放动画。触发事件(此处按钮单击)时,将两个面板的动画设置为向左滑动。你可以放一个反向动画来滑回它们。

我是这样做的。

<强> AnimActivity

public class AnimActivity extends Activity {

    View leftPanel, rightPanel;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anim);

        leftPanel = findViewById(R.id.left_panel);
        rightPanel = findViewById(R.id.right_panel);
        button = (Button) findViewById(R.id.btn_animate);

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                leftPanel.startAnimation(
                    AnimationUtils.loadAnimation(AnimActivity.this,R.anim.slide_left));
                rightPanel.startAnimation(
                    AnimationUtils.loadAnimation(AnimActivity.this,R.anim.slide_left));
            }
        });
    }       
}

<强> slide_left.xml

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

<强> activity_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/left_panel" 
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:background="#FFD94E4E"
        android:orientation="vertical" >

    </LinearLayout>
    <LinearLayout 
        android:id="@+id/right_panel" 
        android:layout_width="420dp"
        android:layout_height="match_parent"
        android:background="#FF242325"
        android:orientation="vertical" >

        <Button
            android:id="@+id/btn_animate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Animate" />

    </LinearLayout>
</LinearLayout>

注意

这种方法存在一个很大的问题,那就是我已将固定宽度设置为左侧和右侧面板。但我不知道如何解决这个问题。对不起,但希望这有帮助。

答案 1 :(得分:0)