fix #24, support disable swipe gesture and fix setEnabled(boolean) not works issue

This commit is contained in:
daimajia 2014-09-12 10:00:00 +08:00
parent de5c5f9d87
commit 6c3db3425c
3 changed files with 28 additions and 16 deletions

View File

@ -9,7 +9,6 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.daimajia.swipe.SimpleSwipeListener;
import com.daimajia.swipe.SwipeLayout;
import com.nineoldandroids.view.ViewHelper;
@ -69,12 +68,6 @@ public class MyActivity extends Activity {
Toast.makeText(MyActivity.this, "Yo", Toast.LENGTH_SHORT).show();
}
});
sample1.addSwipeListener(new SimpleSwipeListener() {
@Override
public void onOpen(SwipeLayout layout) {
Toast.makeText(MyActivity.this, "Opened", Toast.LENGTH_SHORT).show();
}
});
//sample3

View File

@ -18,8 +18,8 @@
# org.gradle.parallel=true
VERSION_NAME=1.0.8
VERSION_CODE=9
VERSION_NAME=1.1.0
VERSION_CODE=11
GROUP=com.daimajia.swipelayout
ANDROID_BUILD_MIN_SDK_VERSION=8

View File

@ -15,7 +15,6 @@ import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.HeaderViewListAdapter;
import android.widget.ListAdapter;
import java.util.ArrayList;
@ -36,6 +35,8 @@ public class SwipeLayout extends FrameLayout {
private Map<View, ArrayList<OnRevealListener>> mRevealListeners = new HashMap<View, ArrayList<OnRevealListener>>();
private Map<View, Boolean> mShowEntirely = new HashMap<View, Boolean>();
private boolean mSwipeEnabled = true;
public static enum DragEdge {
Left,
Right,
@ -638,6 +639,15 @@ public class SwipeLayout extends FrameLayout {
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if(!isEnabled() || !isEnabledInAdapterView()){
return true;
}
if(!isSwipeEnabled()){
return false;
}
for (SwipeDenier denier : mSwipeDeniers) {
if (denier != null && denier.shouldDenySwipe(ev)) {
return false;
@ -716,10 +726,12 @@ public class SwipeLayout extends FrameLayout {
private float sX = -1 , sY = -1;
@Override
public boolean onTouchEvent(MotionEvent event) {
if(!isEnabledInAdapterView())
if(!isEnabledInAdapterView() || !isEnabled())
return true;
if(!isSwipeEnabled())
return super.onTouchEvent(event);
int action = event.getActionMasked();
ViewParent parent = getParent();
@ -735,6 +747,7 @@ public class SwipeLayout extends FrameLayout {
case MotionEvent.ACTION_DOWN:
mDragHelper.processTouchEvent(event);
parent.requestDisallowInterceptTouchEvent(true);
sX = event.getRawX();
sY = event.getRawY();
@ -839,17 +852,23 @@ public class SwipeLayout extends FrameLayout {
if(adapter != null){
int p = adapterView.getPositionForView(SwipeLayout.this);
if(adapter instanceof BaseAdapter){
enable &= ((BaseAdapter) adapter).isEnabled(p);
enable = ((BaseAdapter) adapter).isEnabled(p);
}else if(adapter instanceof ListAdapter){
enable &= ((ListAdapter) adapter).isEnabled(p);
}else if(adapter instanceof HeaderViewListAdapter){
enable &= ((HeaderViewListAdapter) adapter).isEnabled(p);
enable = ((ListAdapter) adapter).isEnabled(p);
}
}
}
return enable;
}
public void setSwipeEnabled(boolean enabled){
mSwipeEnabled = enabled;
}
public boolean isSwipeEnabled(){
return mSwipeEnabled;
}
private boolean insideAdapterView(){
return getAdapterView() != null;
}