Gre*_*eso 15 android direction swipe android-viewpager fragmentstatepageradapter
我有一个使用ViewPager和FragmentStatePagerAdapter的Android应用程序.然而,我需要添加一个新功能,我必须知道滑动方向从一个片段视图移动到另一个,左或右.(也就是说,当我向左滑动时,我会做一件事,当我向右滑动时,我会做其他事情).
请注意,我不需要在滑动结束后发生事件.滑动发生时我必须做这些事件.我想过使用setOnPageChangeListener()但它并没有告诉我滑动方向.你能告诉我如何找出滑动方向吗?
谢谢.
这很简单,引入了一个实例变量来跟踪当前页面。
public class MyActivity extends Activity implements ViewPager.OnPageChangeListener {
private ViewPager viewPager;
private int currentPosition;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Do trivial stuff
.
.
.
viewPager.setOnClickListener(this); // doesnt have to be in onCreate
}
@Override
public void onPageSelected(int position) {
if(currentPosition < position) {
// handle swipe LEFT
} else if(currentPosition > position){
// handle swipe RIGHT
}
currentPosition = position; // Update current position
}
}
Run Code Online (Sandbox Code Playgroud)
我就遇到了这个问题,并需要知道刷卡的方向,因为它正在发生,以防止在某个方向滑动.这是我如何解决我的问题,希望它对某人有帮助.我发现前面的所有例子都不符合我的要求.
如果您继承了ViewPager,则可以响应onInterceptTouchEvent(MotionEvent event)和的onTouchEvent(MotionEvent event)方法ViewPager
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean wasSwipeToRight = this.wasSwipeToRightEvent(event));
// Do what you want here with left/right swipe
return super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean wasSwipeToRight = this.wasSwipeToRightEvent(event));
// Do what you want here with left/right swipe
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
这是调用事件方向的方法.
// Stores the starting X position of the ACTION_DOWN event
float downX;
/**
* Checks the X position value of the event and compares it to
* previous MotionEvents. Returns a true/false value based on if the
* event was an swipe to the right or a swipe to the left.
*
* @param event - Motion Event triggered by the ViewPager
* @return - True if the swipe was from left to right. False otherwise
*/
private boolean wasSwipeToRightEvent(MotionEvent event){
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = event.getX();
return false;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
return downX - event.getX() > 0;
default:
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
看一下ViewPager.OnPageChangeListener的onPageSelected(int position)方法.在给新选择的页面的索引.如果您跟踪当前页面索引,则可以将其与索引进行比较以获得滑动的左/右方向.positionposition
既然你提到OnPageChangeListener没有帮助,请考虑onInterceptTouchEvent (MotionEvent ev)方法ViewPager.考虑MotionEvent的ACTION_DOWN,ACTION_MOVE和ACTION_UP.希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
21241 次 |
| 最近记录: |