Skip to content

Commit

Permalink
🚧 Add OnSwipeChangedListener.
Browse files Browse the repository at this point in the history
  • Loading branch information
JingYeoh committed Aug 2, 2018
1 parent ed57713 commit 2ac5f70
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 5 deletions.
3 changes: 2 additions & 1 deletion app/src/main/java/com/yj/app/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions app/src/main/java/com/yj/app/test/start/StartFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
*/
Expand All @@ -246,6 +246,5 @@ public interface IRigger {
* Return the {@link SwipeLayout} as the puppet can be swiped back.
* Otherwise , return null.
*/
@Nullable
SwipeLayout getSwipeLayout();
}
65 changes: 64 additions & 1 deletion rigger/src/main/java/com/jkb/fragment/swiper/SwipeLayout.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
}

0 comments on commit 2ac5f70

Please sign in to comment.