我有一个简单的黄色背景框,如下所示:
<LinearLayout
android:id="@+id/filter_container"
android:layout_width="match_parent"
android:layout_height="400dp"
android:background="@color/colorYellow"
android:orientation="vertical">
</LinearLayout>
此布局位于片段内,位于屏幕中央,全宽并位于工具栏下方。 当我单击工具栏中的左上角按钮时,我从此视图顶部滑动,就像过滤器菜单一样:
它原来设置为“INVISIBLE”,当我点击左上角按钮时,我会用这个动画显示它:
slide_down_anim.xml
`<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.1" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime" />
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="-100%" android:toYDelta="0%"
android:interpolator="@android:anim/accelerate_interpolator"
/>
</set>`
然后重新点击我用这个动画“隐藏”它:
`<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="@android:integer/config_shortAnimTime" />
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0%" android:toYDelta="-100%"
android:interpolator="@android:anim/accelerate_interpolator"
/>
</set>`
执行此操作的Java代码是:
filterbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isFilterPanelShown){
filterContiner.bringToFront();
Animation topDown =
AnimationUtils.loadAnimation(getContext(),
R.anim.slide_down_anim);
filterContiner.startAnimation(topDown);
isFilterPanelShown = true;
filterContiner.setVisibility(View.VISIBLE);
} else {
// Hide filter panel.
Animation bottomUp =
AnimationUtils.loadAnimation(getContext(),
R.anim.slide_up_anim);
filterContiner.startAnimation(bottomUp);
isFilterPanelShown = false;
}
}
});
我正在努力实现的是滑动/向上拖动此视图以关闭它。我从使用从此论坛复制的代码处理OnTouchListener开始:
filterContiner.setOnTouchListener(new View.OnTouchListener() {
float dX, dY;
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
dX = view.getX() - event.getRawX();
dY = view.getY() - event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
Log.e("Spostamento verticale",dY+"");
view.animate()
.y(event.getRawY() + dY)
.setDuration(0)
.start();
break;
default:
return false;
}
return true;
}
});
但我唯一得到的是我可以在任何地方垂直拖动视图,但是当我隐藏并显示它与之前的位置相同时。 我想检查视图是否向顶部拖动一点阈值然后它将关闭动画,否则它应该回到完全显示。
谢谢。