HorizontalScrollViewとListViewのスライドイベントの競合を完全に解決
1984 ワード
HorizontalScrollViewがListViewスライドイベントと競合し、ListViewドロップダウンが不感になる.以下は1種の比較的に完璧な実現方式を提供して、もし縦方向のScrollViewならば、対応して少し直して~~上のコード
package wosai.com.membermarketing.util.layout;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.HorizontalScrollView;
/**
* HorizontalScrollView,
*
* Created by yuyh on 2015/10/30.
*/
public class CustomHorizontalScrollView extends HorizontalScrollView {
float lastX, lastY;
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public CustomHorizontalScrollView(Context context) {
super(context);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
setFadingEdgeLength(0);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
setFadingEdgeLength(0);
}
public CustomHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
setFadingEdgeLength(0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
/**
* < , , 。 ScrollView, '<' '>'
*/
class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (Math.abs(distanceY) < Math.abs(distanceX)) {
return true;
}
return false;
}
}
}