手势滑动关闭activity(不适合fragment)
先上图
微信效果
酷狗或今日头条效果
旋转效果
阴影
- 在你app的
build.gradle
中添加依赖
compile 'com.github.sunrise:slidefinish:1.0.0'
- 在styles.xml的theme上加上,也就是设置透明背景
<item name="android:windowIsTranslucent">true</item>
- 在你的
BaseActivity
的onCreate()
和onDestroy()
中加上如下代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
SlideFinishManager.getInstance().bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
...
SlideFinishManager.getInstance().unbind();
}
到此就就可看到上图效果,如果不想某个activity
滑动,可在当前activity
中的onCreate()
中加上
SlideFinishManager.getInstance().setSlideEnable(false);
你还可以设置 你还可以设置滑动的效果(0:无效果 1:微信效果 2:酷狗或今日头条效果 3:酷狗旋转效果),设置activity的左边缘是否有阴影,设置阴影的方向等,如:
SlideFinishManager.getInstance().setEdgeShadow(false).setSlideEffect(SlideFinishManager.ROTATE).setShadowOrientation(SlideFinishManager.LEFT);
详细请看SlideFinishManager
主要处理了onInterceptTouchEvent
和onTouchEvent
方法
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mSlideEnable) {
switch (ev.getAction()) {
case MotionEvent.ACTION_MOVE:
processMoveEvent((int) ev.getX());
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
processUpEvent();
break;
}
return true;
} else {
return false;
}
}
private void processMoveEvent(final int x) {
if (mPreviousSlideLayout != null) {
switch (slideEffect) {
case 0:
move(x);
break;
case 1:
move(x);
mPreviousSlideLayout.scrollTo((int) ((1 + (float) getScrollX() / mLastDownToX) * mPreWidth), 0);
mAlpha = Math.max((float) (x - mLastDownX) / mLastDownToX * FINALALPHA, 0);
invalidate();
break;
case 2:
move(x);
mScale = (float) (x - mLastDownX) / mLastDownToX * (1 - FINALSCALE) + FINALSCALE;
if (mPreviousChild != null) {
mPreviousChild.setScaleX(mScale);
mPreviousChild.setScaleY(mScale);
}
mAlpha = Math.max((float) (x - mLastDownX) / mLastDownToX * FINALALPHA, 0);
invalidate();
break;
case 3:
if (mLastDownToX != 0) {
mRotation = Math.max((float) (x - mLastDownX) / mLastDownToX * 30, 0);
mContentView.setRotation(mRotation);
}
break;
}
}
}