我的布局中有以下 View
<RelativeLayout
android:id="@+id/wrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<LinearLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<!-- some child views here -->
</LinearLayout>
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/header"
android:visibility="gone">
<!-- some other child views here -->
</LinearLayout>
</RelativeLayout>
包装器RelativeLayout与其父级的底部对齐。并且初始页脚 View 不显示(View.GONE)。当点击标题 View 时,应向用户显示页脚,并从屏幕底部向上滑动动画,当用户再次点击时,页脚应向下滑动到底部。当我在页脚 View 上启动向上滑动动画时,它不会与动画同时插入标题 View 。如果我首先将页脚 View 可见性设置为 View.INVISIBLE 然后启动动画,则页眉 View 会立即向上推(不与动画或页脚 View 一起),并且页脚 View 带有动画。
这是调用动画的代码
footer.setVisibility(View.INVISIBLE);
Animation animation = AnimationUtils.loadAnimation(activity, R.anim.slide_up_from_bottom);
animation.setDuration(animDuration);
footer.startAnimation(animation);
footer.postDelayed(new Runnable() {
@Override
public void run()
{
footer.setVisibility(View.VISIBLE);
}
}, animDuration);
这是动画文件内容:
如何使此动画插入页眉 View ,同时页脚 View 向上滑动?
希望我说清楚了。我想要的只是两个 View 一起向上/向下移动。
如果我将动画应用于包装 View ,那么它会从底部向上滑动(而不是从当前位置)。
最佳答案
如果您希望页眉与页脚动画一起插入,您可以手动执行以下操作
public class MainActivity extends Activity {
private LinearLayout header,footer;
private RelativeLayout wrapper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
header = (LinearLayout) findViewById(R.id.header);
footer = (LinearLayout) findViewById(R.id.footer);
wrapper = (RelativeLayout) findViewById(R.id.wrapper);
header.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(footer.getVisibility() == View.VISIBLE){
int footerHeight = footer.getMeasuredHeight();
float initialWrapperY = wrapper.getY();
ObjectAnimator oa=ObjectAnimator.ofFloat(wrapper, "y", initialWrapperY,initialWrapperY+footerHeight);
oa.setDuration(400);
oa.start();
oa.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(android.animation.Animator animation) {
footer.setVisibility(View.INVISIBLE);
};
});
}
else{
final float initialWrapperY = wrapper.getY();
footer.setVisibility(View.VISIBLE);
wrapper.setY(initialWrapperY);
ViewTreeObserver vto=wrapper.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
wrapper.getViewTreeObserver().removeOnPreDrawListener(this);
final int footerHeight = footer.getMeasuredHeight();
ObjectAnimator oa=ObjectAnimator.ofFloat(wrapper, "y", initialWrapperY,(initialWrapperY-footerHeight));
oa.setDuration(400);
oa.start();
return true;
}
});
}
}
});
}
}
关于android - 将上面的 View 向上推,同时将另一个 View 向上滑动动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32088351/