san*_*one 0 android android-layout swipe-gesture
我需要在应用程序中对代码进行滑动.但是,使用ViewPager不适合设计,所以我必须编写滑动逻辑.
我过去已经做过几十次了Gestures,但滑动从来没有像ViewPager例如那样平滑.这不可靠.有时它工作正常,但经常无法识别滑动因此我不得不再次滑动.另一个问题是滑动操作会调用"拉动刷新"指示器,因此滑动不会再次激活.
有没有完美的刷卡逻辑库?如果没有,我会发布我经常使用的滑动逻辑,这样你就可以告诉我它的缺陷了.
这是我的onSwipeTouchListener班级.
public class OnSwipeTouchListener implements View.OnTouchListener {
private GestureDetector gestureDetector;
public OnSwipeTouchListener(Context c) {
gestureDetector = new GestureDetector(c, new GestureListener());
}
public boolean onTouch(final View view, final MotionEvent motionEvent) {
return gestureDetector.onTouchEvent(motionEvent);
}
private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 10;
private static final int SWIPE_VELOCITY_THRESHOLD = 10;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
onClick();
return super.onSingleTapUp(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
onDoubleClick();
return super.onDoubleTap(e);
}
@Override
public void onLongPress(MotionEvent e) {
onLongClick();
super.onLongPress(e);
}
// Determines the fling velocity and then fires the appropriate swipe event accordingly
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeDown();
} else {
onSwipeUp();
}
}
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
public void onSwipeRight() {
}
public void onSwipeLeft() {
}
public void onSwipeUp() {
}
public void onSwipeDown() {
}
public void onClick() {
}
public void onDoubleClick() {
}
public void onLongClick() {
}
Run Code Online (Sandbox Code Playgroud)
}
这是你如何使用它.
mainView.setOnTouchListener(new OnSwipeTouchListener(getActivity()) {
@Override
public void onSwipeUp() {
// Do Stuff here
}
@Override
public void onClick() {
// Do Stuff here
}
});
Run Code Online (Sandbox Code Playgroud)
它很顺利.我尝试了很多其他的例子,但这是最好的例子.您还可以设置滑动手势的阈值.您需要做的就是更改这些变量.
private static final int SWIPE_THRESHOLD = 10;
private static final int SWIPE_VELOCITY_THRESHOLD = 10;
Run Code Online (Sandbox Code Playgroud)
它可以检测LeftSwipe,RightSwipe,UpSwipe,DownSwipe,OnClick,OnDoubleClick和OnLongClick.
我用这个类来改变片段UpSwipe和DownSwipe手势.
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |