1.准备手势处理
LeftGesture leftGesture;
GestureDetector mGestureDetector;final int MIN_DINTANCE_MODELY = 75;
final float MIN_DINTANCE_ORDERY = 0.1f;
Animation up, down, header_up, header_down;
2.初始化手势和动画等行为
leftGesture = new LeftGesture();// 手势监听类
mGestureDetector = new GestureDetector(getActivity(), leftGesture);
up = AnimationUtils.loadAnimation(getActivity(), R.anim.up);
down = AnimationUtils.loadAnimation(getActivity(), R.anim.down);
header_up = AnimationUtils.loadAnimation(getActivity(), R.anim.header_up);
header_down = AnimationUtils.loadAnimation(getActivity(), R.anim.header_down);
3.注册手势
class LeftGesture extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (e1 != null && e2 != null)
if ((e1.getY() - e2.getY()) > MIN_DINTANCE_MODELY) {
// 向上滑动
if ((e1.getY() - e2.getY()) > MIN_DINTANCE_ORDERY && Math.abs(distanceY) > MIN_DINTANCE_ORDERY) {
if (header.getVisibility() == View.VISIBLE) {
header.startAnimation(header_down);
header.setVisibility(View.GONE);
}
if (radioGroup.getVisibility() == View.VISIBLE) {
radioGroup.startAnimation(down);
radioGroup.setVisibility(View.GONE);
}
}
} else if ((e2.getY() - e1.getY()) > MIN_DINTANCE_MODELY) {
// 向下滑动
if ((e2.getY() - e1.getY()) > MIN_DINTANCE_ORDERY&& Math.abs(distanceY) > MIN_DINTANCE_ORDERY) {
if (header.getVisibility() == View.GONE) {
header.startAnimation(header_up);
header.setVisibility(View.VISIBLE);
}
if (radioGroup.getVisibility() == View.GONE) {
radioGroup.startAnimation(up);
radioGroup.setVisibility(View.VISIBLE);
}
}
}
return false;
}
}
4.准备的一些动画xml
up.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.0%"
android:toYDelta="0.0" />
</set>
down.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="0.0"
android:toYDelta="100.0%" />
</set>