我有一个带有两个孩子的Frame Layout,其中一个是LinearLayout(search_filters),就在我的工具栏下面。
<!-- Your normal content view -->
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:animateLayoutChanges="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#EEEEEE"
android:id="@+id/main_parent_view"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/theme_primary"
android:id="@+id/search_filters"
android:padding="4dp"
android:animateLayoutChanges="true"
android:visibility="visible"
android:elevation="2dp"
android:layout_marginTop="-200dp"/>
(不确定我如何设置我的marginTop)
我想要实现的效果是让search_filters从顶部(屏幕外)滑动到工具栏的底部。
滑入
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) searchFilters.getLayoutParams();
params.topMargin = -(int)(400 * (1-interpolatedTime));
searchFilters.setLayoutParams(params);
}
};
a.setDuration(300); // in ms
a.setInterpolator(new AccelerateDecelerateInterpolator());
searchFilters.startAnimation(a);
和
滑开
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) searchFilters.getLayoutParams();
params.topMargin = -(int)(400 * interpolatedTime);
searchFilters.setLayoutParams(params);
}
};
a.setDuration(300); // in ms
android.R.interpolator.fast_out_slow_in); a.setInterpolator(new AccelerateDecelerateInterpolator());
searchFilters.startAnimation(a);
问题在于&#34; 400&#34;是完全随意的,并不适用于所有设备(在我的nexus 4上运行,但不是我的galaxy s4)。
如何更改我的代码,以便视图始终消失(比如说,为satefy和动画添加+ 25%)?
答案 0 :(得分:1)
您可以使用
找到屏幕的高度height = getWindowManager().getDefaultDisplay().getHeight()
然后,使用此值作为topMargin来完成从屏幕隐藏视图。
params.topMargin = -(int)(height * interpolatedTime);
您还可以使用
找到视图的高度mView.measure(0,0);
mViewHeight = mView.getMeasuredHeight();
然后使用该值作为保证金。
**编辑:**或者为了使其更容易,请在动画的XML中使用百分比值。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="-100%"
android:toYDelta="0%" />
</set>