处理viewpager轮播滚动时手势点击滑动处理
来源:互联网 发布:dnf剑宗短剑精通数据 编辑:程序博客网 时间:2024/04/26 02:03
package com.example.googleplay.views;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* 处理图片轮播时点击滑动处理
*
* @author haopi
*
*/
public class InnerViewPager extends ViewPager
{
private float mDownX;
private float mDownY;
private float mMoveX;
private float mMoveY;
public InnerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public InnerViewPager(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// 上下滑动,父亲处理
// 左右滑动,自己处理
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// 获取按下时的位置
mDownX = ev.getRawX();
mDownY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 获取移动中的位置
mMoveX = ev.getRawX();
mMoveY = ev.getRawY();
// 获取移动位置的差
int diffX = (int) (mDownX - mMoveX);
int diffY = (int) (mDownY - mMoveY);
// 如果是左右滑动的位置差 > 上下滑动的位置差,就视为左右滑动,否则为上下滑动
if (Math.abs(diffX) > Math.abs(diffY)) {
// 左右滑动,自己处理
getParent().requestDisallowInterceptTouchEvent(true);
} else {
// 上下滑动,父亲处理
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
// 按钮弹起的逻辑
break;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
// @Override
// public boolean onTouchEvent(MotionEvent ev) {
// // 上下滑动,父亲处理
// // 左右滑动,自己处理
// switch (ev.getAction()) {
// case MotionEvent.ACTION_DOWN:
// // 获取按下时的位置
// mDownX = ev.getRawX();
// mDownY = ev.getRawY();
// break;
// case MotionEvent.ACTION_MOVE:
// // 获取移动中的位置
// mMoveX = ev.getRawX();
// mMoveY = ev.getRawY();
//
// // 获取移动位置的差
// int diffX = (int) (mDownX - mMoveX);
// int diffY = (int) (mDownY - mMoveY);
//
// // 如果是左右滑动的位置差 > 上下滑动的位置差,就视为左右滑动,否则为上下滑动
// if (Math.abs(diffX) > Math.abs(diffY)) {
// // 左右滑动,自己处理
// getParent().requestDisallowInterceptTouchEvent(true);
// } else {
// // 上下滑动,父亲处理
// getParent().requestDisallowInterceptTouchEvent(false);
// }
// break;
// case MotionEvent.ACTION_UP:
// // 按钮弹起的逻辑
// break;
//
// default:
// break;
// }
//
// return super.onTouchEvent(ev);
// }
}
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* 处理图片轮播时点击滑动处理
*
* @author haopi
*
*/
public class InnerViewPager extends ViewPager
{
private float mDownX;
private float mDownY;
private float mMoveX;
private float mMoveY;
public InnerViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public InnerViewPager(Context context) {
super(context);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// 上下滑动,父亲处理
// 左右滑动,自己处理
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// 获取按下时的位置
mDownX = ev.getRawX();
mDownY = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 获取移动中的位置
mMoveX = ev.getRawX();
mMoveY = ev.getRawY();
// 获取移动位置的差
int diffX = (int) (mDownX - mMoveX);
int diffY = (int) (mDownY - mMoveY);
// 如果是左右滑动的位置差 > 上下滑动的位置差,就视为左右滑动,否则为上下滑动
if (Math.abs(diffX) > Math.abs(diffY)) {
// 左右滑动,自己处理
getParent().requestDisallowInterceptTouchEvent(true);
} else {
// 上下滑动,父亲处理
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
// 按钮弹起的逻辑
break;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
// @Override
// public boolean onTouchEvent(MotionEvent ev) {
// // 上下滑动,父亲处理
// // 左右滑动,自己处理
// switch (ev.getAction()) {
// case MotionEvent.ACTION_DOWN:
// // 获取按下时的位置
// mDownX = ev.getRawX();
// mDownY = ev.getRawY();
// break;
// case MotionEvent.ACTION_MOVE:
// // 获取移动中的位置
// mMoveX = ev.getRawX();
// mMoveY = ev.getRawY();
//
// // 获取移动位置的差
// int diffX = (int) (mDownX - mMoveX);
// int diffY = (int) (mDownY - mMoveY);
//
// // 如果是左右滑动的位置差 > 上下滑动的位置差,就视为左右滑动,否则为上下滑动
// if (Math.abs(diffX) > Math.abs(diffY)) {
// // 左右滑动,自己处理
// getParent().requestDisallowInterceptTouchEvent(true);
// } else {
// // 上下滑动,父亲处理
// getParent().requestDisallowInterceptTouchEvent(false);
// }
// break;
// case MotionEvent.ACTION_UP:
// // 按钮弹起的逻辑
// break;
//
// default:
// break;
// }
//
// return super.onTouchEvent(ev);
// }
}
0 0
- 处理viewpager轮播滚动时手势点击滑动处理
- Android使用ViewPager实现图片轮播和手势滑动
- ViewPager实现无限循环,左右滑动,定时轮播及内存泄漏处理
- android手势滑动处理
- 关于ViewPager广告轮播推送中“如何处理自动滑动和用户滑动事件”的解决方案
- viewpager嵌套viewpager滑动处理
- Android的滑动手势处理
- Android的滑动手势处理
- 有关不规则图片的点击响应事件和手势滑动闪退的处理d
- BannerViewpager 实现广告轮播(定时轮播+手势滑动)
- ViewPager --轮播以及左右滑动
- Android-ViewPager-循环滑动(轮播)
- ViewPager手势滑动禁用
- android onTouchEvent 左右手势滑动事件处理
- android onTouchEvent 左右手势滑动事件处理
- android onTouchEvent 左右手势滑动事件处理
- android onTouchEvent 左右手势滑动事件处理
- android onTouchEvent 左右手势滑动事件处理
- C++primer第4版第十章关联容器
- 基本语句总结
- 工作异常记录一
- C++ primer 四 标准库类型vector
- 368. Largest Divisible Subset**
- 处理viewpager轮播滚动时手势点击滑动处理
- codeforces contest 353
- 1350. Canteen Timus Online Judge
- OpenCV-Python[第三章]——性能测量与优化技巧
- Meta http-equiv属性详解
- 同域iframe中子页面如何访问父页面js中的方法
- 内容提供器(Content Provider)
- 内存溢出和内存泄漏的区别
- spring bean初始化时机