Android手势识别之Fragment嵌套ViewPager缩放问题
来源:互联网 发布:iphone显示无网络连接 编辑:程序博客网 时间:2024/06/05 02:08
一、问题发现
其实对于手势识别和触摸监听这一块,已经有了事件分发机制和手势识别,还有触摸事件方法等等解决方案,但是我这这里说的,算是一个嵌套触摸问题,我也是网上查的资料才找到得解决方式,我们来看看具体得情况,如图显示得是两个标题,振动棒图和振动趋势,点击两个按钮切换下面得fragment,点击振动趋势显示下面得折线图,这个fragment里面包含得是一个viewpager,view pager里面包含得是一个折线图,现在得需求就是判断手势缩放折线图,判断放大或者缩小,然后重新去请求数据,然后重新加载;
现在得问题是,我重写了onTouchEvent方法,在fragment里面,但是我要监听得手势缩放得对象是view pager里面得折线图,这个时候有人告诉我在view pager里面重写触摸事件,我这里view pager并没有自定义,直接调用后只有adapter里面加载数据,adapter里面并不能重写触摸事件得方法,所以我就捕捉不到这个缩放的事件,尽管我在fragment里面重写了触摸事件的方法,但是只有view pager以上才能捕捉到缩小和放大事件,于是就有了后面的思路;
二、问题解决
activity中重写dispatchTouchEvent方法将触摸事件
public interface MyTouchListener { public void onTouchEvent(MotionEvent event); } // 保存MyTouchListener接口的列表 private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<VibrationActivity.MyTouchListener>(); /** * 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法 * * @param listener */ public void registerMyTouchListener(MyTouchListener listener) { myTouchListeners.add(listener); } /** * 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法 * * @param listener */ public void unRegisterMyTouchListener(MyTouchListener listener) { myTouchListeners.remove(listener); } /** * 分发触摸事件给所有注册了MyTouchListener的接口 */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { for (MyTouchListener listener : myTouchListeners) { listener.onTouchEvent(ev); } return super.dispatchTouchEvent(ev); }
double nLenStart = 0; VibrationActivity.MyTouchListener myTouchListener = new VibrationActivity.MyTouchListener() { @Override public void onTouchEvent(MotionEvent event) { // 处理手势事件 int nCnt = event.getPointerCount(); int n = event.getAction(); if((event.getAction()&MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN && 2 == nCnt){ for(int i=0; i< nCnt; i++) { float x = event.getX(i); float y = event.getY(i); Point pt = new Point((int)x, (int)y); } int xlen = Math.abs((int)event.getX(0) - (int)event.getX(1)); int ylen = Math.abs((int)event.getY(0) - (int)event.getY(1)); nLenStart = Math.sqrt((double)xlen*xlen + (double)ylen * ylen); }else if( (event.getAction()&MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP && 2 == nCnt) { for(int i=0; i< nCnt; i++) { float x = event.getX(i); float y = event.getY(i); Point pt = new Point((int)x, (int)y); } int xlen = Math.abs((int)event.getX(0) - (int)event.getX(1)); int ylen = Math.abs((int)event.getY(0) - (int)event.getY(1)); double nLenEnd = Math.sqrt((double)xlen*xlen + (double)ylen * ylen); Log.e("比例",""+nLenStart/nLenEnd); mAdapter.setZoom(nLenStart/nLenEnd,mPosition,true); } } }; // 将myTouchListener注册到分发列表 ((VibrationActivity)this.getActivity()).registerMyTouchListener(myTouchListener);
阅读全文
0 0
- Android手势识别之Fragment嵌套ViewPager缩放问题
- Android FragmentTabHost嵌套(ViewPager+Fragment)问题
- Android ViewPager嵌套Fragment
- Viewpager+Fragment嵌套Viewpager+Fragment空白页问题
- Android ScaleGestureDetector缩放手势识别
- Viewpager 嵌套fragment的问题
- viewpager的fragment嵌套viewpager的问题
- Android解决ViewPager嵌套Fragment,Fragment嵌套ViewPager滑动冲突
- Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment
- Android解决ViewPager嵌套Fragment,Fragment嵌套ViewPager滑动冲突
- Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment
- Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment
- Android ViewPager Fragment相互嵌套遇到的问题
- Android 多层fragment 嵌套时,viewPager不显示的问题
- Android多层fragment嵌套Viewpager不显示问题
- Fragment嵌套Fragment+ViewPager空白问题
- android之手势识别
- android之手势识别
- 【SEO方案】拓展培训行业推广优化方案,三个月排名飙升
- 第四方聚合支付系统源码PHP版
- Python远程连接mysql
- POJ 2342 Anniversary party
- win10+python3.5+tensorflow安装
- Android手势识别之Fragment嵌套ViewPager缩放问题
- python实现:无刻度的一大一小水罐取水问题
- 动态创建表格
- Android调试:真机连接不上AS(ADB端口被占用)
- 位运算表示集合的整数
- 欢迎使用CSDN-markdown编辑器
- 网络安全实验,虚拟机下ubuntu路由设置
- v4l2的学习建议和流程解析
- Ubuntu 16.04虚拟机调整窗口大小自适应Windows 7