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标记吗?我会试试这个。看起来很完美。这看起来也很完美。谢谢分享,欢迎。如果这个答案对您有效,请将其标记为答案,以便其他人从中受益:)。