Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将两个视图平滑地动画在一起?_Android_Animation - Fatal编程技术网

Android 如何将两个视图平滑地动画在一起?

Android 如何将两个视图平滑地动画在一起?,android,animation,Android,Animation,我有两条直线。假设它们是左面板和主面板,如图所示。我正在使用动画隐藏左面板。这就是我使用的: <scale android:duration="500" android:fromXScale="0.0" android:fromYScale="1.0" android:interpolator="@android:anim/linear_interpolator" android:toXScale="1.0" android:toYScale

我有两条直线。假设它们是左面板主面板,如图所示。我正在使用动画隐藏左面板。这就是我使用的:

<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=“@+id/left_panel”将其固定在左侧面板的右侧。问题是,当我使用动画隐藏左面板时,主面板只是跳到起点。当我再次使用动画显示左面板时,主面板跳转到终点


那么,如何才能将这两个视图平滑地移动到一起?

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

我是这样做的

动物活动

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));
            }
        });
    }       
}
幻灯片_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>
<?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>

活动\u anim.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>
<?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>

注意


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

您可以使用导航抽屉进行左侧布局

编辑:

这个很容易实现

你也可以在这个链接中找到许多有用的例子


您需要在两个面板上使用动画。我不能在主面板上使用相同的动画,所以我应该在主面板上使用什么?您可以尝试向右滑动它,也许可以?这两个面板是否同时可见?在哪个视图上设置XML动画的动画?左面板还是主面板?如果要隐藏左侧面板,是否希望使用
fromXScale=“1.0”
而不是
fromXScale=“0.0”
?这并不能完全解决您原来的问题,因为您的问题是
动画
不一定会更新它们设置动画的
视图
的布局,这就是为什么它看起来会跳跃。如果你的目标是Android 3.0+,我建议你研究一下
ObjectAnimator
类。只是在这里转转一下。但是你试过xml中的animateLayoutChanges标记吗?我会试试这个。看起来很完美。这看起来也很完美。谢谢分享,欢迎。如果这个答案对您有效,请将其标记为答案,以便其他人从中受益:)。