diff --git a/app/src/main/java/com/yj/app/MainActivity.java b/app/src/main/java/com/yj/app/MainActivity.java index 71aa594..eccbd2a 100644 --- a/app/src/main/java/com/yj/app/MainActivity.java +++ b/app/src/main/java/com/yj/app/MainActivity.java @@ -3,10 +3,11 @@ import android.os.Bundle; import com.jkb.fragment.rigger.rigger.Rigger; +import com.jkb.fragment.swiper.annotation.SwipeEdge; import com.jkb.fragment.swiper.annotation.Swiper; import com.yj.app.base.BaseActivity; -@Swiper(parallaxOffset = 0.5f) +@Swiper(parallaxOffset = 0.5f, edgeSide = SwipeEdge.ALL) public class MainActivity extends BaseActivity { @Override diff --git a/app/src/main/java/com/yj/app/test/start/StartFragment.java b/app/src/main/java/com/yj/app/test/start/StartFragment.java index e6c6da0..f92a77b 100644 --- a/app/src/main/java/com/yj/app/test/start/StartFragment.java +++ b/app/src/main/java/com/yj/app/test/start/StartFragment.java @@ -5,13 +5,17 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; + import com.jkb.fragment.rigger.annotation.Animator; import com.jkb.fragment.rigger.annotation.Puppet; import com.jkb.fragment.rigger.rigger.Rigger; +import com.jkb.fragment.rigger.utils.Logger; +import com.jkb.fragment.swiper.SwipeLayout; import com.jkb.fragment.swiper.annotation.SwipeEdge; import com.jkb.fragment.swiper.annotation.Swiper; import com.yj.app.R; import com.yj.app.base.BaseFragment; + import java.util.UUID; /** @@ -44,6 +48,22 @@ public void onCreate(@Nullable Bundle savedInstanceState) { R.drawable.swiper_shadow_left, R.drawable.swiper_shadow_right, R.drawable.swiper_shadow_top, R.drawable.swiper_shadow_bottom }); + Rigger.getRigger(this).getSwipeLayout().setOnSwipeChangedListener(new SwipeLayout.OnSwipeChangedListener() { + @Override + public void onEdgeTouched(SwipeLayout v, SwipeEdge edge, Object puppet) { + Logger.d(StartFragment.this, "onEdgeTouched::SwipeEdge=" + edge); + } + + @Override + public void onSwipeChanged(SwipeLayout v, Object puppet, float percent) { + Logger.d(StartFragment.this, "onSwipeChanged::percent=" + percent); + } + + @Override + public void onSwipeBacked(SwipeLayout v, Object puppet) { + Logger.d(StartFragment.this, "onSwipeBacked"); + } + }); } //data diff --git a/rigger/src/main/java/com/jkb/fragment/rigger/rigger/IRigger.java b/rigger/src/main/java/com/jkb/fragment/rigger/rigger/IRigger.java index b05f8e3..5f56e1d 100644 --- a/rigger/src/main/java/com/jkb/fragment/rigger/rigger/IRigger.java +++ b/rigger/src/main/java/com/jkb/fragment/rigger/rigger/IRigger.java @@ -5,9 +5,11 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; + import com.jkb.fragment.rigger.annotation.Puppet; import com.jkb.fragment.rigger.exception.AlreadyExistException; import com.jkb.fragment.swiper.SwipeLayout; + import java.util.Stack; /** @@ -40,7 +42,6 @@ public interface IRigger { * from XML or as supplied when added in a transaction. * * @param tag The fragment tag to be found. - * * @return The fragment if found or null otherwise. */ Fragment findFragmentByTag(String tag); @@ -221,7 +222,6 @@ public interface IRigger { * @param resultCode The result code to propagate back to the originating * fragment, often RESULT_CANCELED or RESULT_OK * @param bundle The data to propagate back to the originating fragment. - * * @see Rigger#RESULT_OK * @see Rigger#RESULT_CANCELED */ @@ -246,6 +246,5 @@ public interface IRigger { * Return the {@link SwipeLayout} as the puppet can be swiped back. * Otherwise , return null. */ - @Nullable SwipeLayout getSwipeLayout(); } diff --git a/rigger/src/main/java/com/jkb/fragment/swiper/SwipeLayout.java b/rigger/src/main/java/com/jkb/fragment/swiper/SwipeLayout.java index 57c43c0..c2623a6 100644 --- a/rigger/src/main/java/com/jkb/fragment/swiper/SwipeLayout.java +++ b/rigger/src/main/java/com/jkb/fragment/swiper/SwipeLayout.java @@ -20,8 +20,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; + import com.jkb.fragment.rigger.rigger.Rigger; import com.jkb.fragment.swiper.annotation.SwipeEdge; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -61,6 +63,8 @@ public class SwipeLayout extends FrameLayout { private float mScrimOpacity; private float mEdgeSize; + private OnSwipeChangedListener mOnSwipeChangedListener; + public SwipeLayout(@NonNull Context context) { this(context, null); } @@ -137,6 +141,21 @@ public boolean tryCaptureView(@NonNull View child, int pointerId) { mCurrentSwipeOrientation = -1; } } + if (mOnSwipeChangedListener != null) { + SwipeEdge swipeEdge = null; + if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_LEFT) != 0) { + swipeEdge = SwipeEdge.LEFT; + } else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_RIGHT) != 0) { + swipeEdge = SwipeEdge.RIGHT; + } else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_TOP) != 0) { + swipeEdge = SwipeEdge.TOP; + } else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_BOTTOM) != 0) { + swipeEdge = SwipeEdge.BOTTOM; + } + if (swipeEdge != null) { + mOnSwipeChangedListener.onEdgeTouched(SwipeLayout.this, swipeEdge, mPuppetHost); + } + } return dragEnable; } @@ -214,6 +233,9 @@ public void onViewPositionChanged(@NonNull View changedView, int left, int top, preFragment.getView().setVisibility(GONE); } } else if (mScrollPercent >= 1) { + if (mOnSwipeChangedListener != null) { + mOnSwipeChangedListener.onSwipeBacked(SwipeLayout.this, mPuppetHost); + } if (preFragment != null) { View preView = preFragment.getView(); if (preView != null) { @@ -238,6 +260,9 @@ public void onViewPositionChanged(@NonNull View changedView, int left, int top, Rigger.getRigger(mPuppetHost).closeWithoutTransaction(); } } else { + if (mOnSwipeChangedListener != null) { + mOnSwipeChangedListener.onSwipeChanged(SwipeLayout.this, mPuppetHost, mScrollPercent); + } if (preFragment != null) { View preView = preFragment.getView(); if (preView != null && preView.getVisibility() != VISIBLE) { @@ -305,7 +330,7 @@ private void drawShadow(@NonNull Canvas canvas, @NonNull View child) { drawShadowChild(canvas, mShadowDrawables[2], childRect.left, childRect.top - mShadowWidth, childRect.right, childRect.top); } - } else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_RIGHT) != 0) { + } else if ((mCurrentSwipeOrientation & ViewDragHelper.EDGE_BOTTOM) != 0) { if (mShadowDrawables.length > 3) { drawShadowChild(canvas, mShadowDrawables[3], childRect.left, childRect.bottom, childRect.right, childRect.bottom + mShadowWidth); @@ -613,4 +638,42 @@ private boolean canSwipe(SwipeEdge... swipeEdges) { } return false; } + + public void setOnSwipeChangedListener(OnSwipeChangedListener onSwipeChangedListener) { + mOnSwipeChangedListener = onSwipeChangedListener; + } + + /** + * Interface definition for a callback to be invoked when the swipeLayout is swiping or + * status is changed. + * + * @see #setOnSwipeChangedListener(OnSwipeChangedListener) + */ + public interface OnSwipeChangedListener { + /** + * Called when the swipe edge is touched. + * + * @param v The view whose swipe status has changed. + * @param edge The touched edge. + * @param puppet The puppet handle this swipe. + */ + void onEdgeTouched(SwipeLayout v, SwipeEdge edge, Object puppet); + + /** + * Called when the swipe status of a view is changed. + * + * @param v The view whose swipe status has changed. + * @param puppet The puppet handle this swipe. + * @param percent The percent of swipe progress. + */ + void onSwipeChanged(SwipeLayout v, Object puppet, float percent); + + /** + * Called when the view is swiped back. + * + * @param v The view whose swipe status has changed. + * @param puppet The puppet handle this swipe. + */ + void onSwipeBacked(SwipeLayout v, Object puppet); + } }