当前位置: 首页 > news >正文

React-Native PanResponder手势识别器

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

PanResponder类可以将多点触摸操作协调成一个手势。它使得一个单点触摸可以接受更多的触摸操作,也可以用于识别简单的多点触摸手势 它提供了一个对触摸响应系统响应器的可预测的包装。对于每一个处理函数,它在原生事件之外提供了一个新的gestureState对象。

原生事件nativeEvent

  • changedTouches - 在上一次事件之后,所有发生变化的触摸事件的数组集合(即上一次事件后,所有移动过的触摸点)
  • identifier - 触摸点的ID
  • locationX - 触摸点相对于父元素的横坐标
  • locationY - 触摸点相对于父元素的纵坐标
  • pageX - 触摸点相对于根元素的横坐标
  • pageY - 触摸点相对于根元素的纵坐标
  • target - 触摸点所在的元素ID
  • timestamp - 触摸事件的时间戳,可用于移动速度的计算
  • touches - 当前屏幕上的所有触摸点的集合

gestureState对象的属性

  • stateID - 触摸状态的ID。在屏幕上有至少一个触摸点的情况下,这个ID会一直有效。
  • moveX - 最近一次移动时的屏幕横坐标
  • moveY - 最近一次移动时的屏幕纵坐标
  • x0 - 当响应器产生时的屏幕坐标
  • y0 - 当响应器产生时的屏幕坐标
  • dx - 从触摸操作开始时的累计横向路程
  • dy - 从触摸操作开始时的累计纵向路程
  • vx - 当前的横向移动速度
  • vy - 当前的纵向移动速度
  • numberActiveTouches - 当前在屏幕上的有效触摸点的数量

首先在componentWillMount添加监视器

 componentWillMount() {
           // 添加监视器
    componentWillMount() { 
        this._PanResponder = PanResponder.create({
            onStartShouldSetPanResponder: () => true,
            //点击回调
            onPanResponderGrant:this._onPanResponderGrant.bind(this),
            //滑动回调
            onPanResponderMove:this._onPanResponderMove.bind(this),
        });

    };
//event原生事件
    //gestureState对象
    _onPanResponderGrant(event,gestureState){

        let touchPointX = gestureState.x0
        let progress = touchPointX / width;
        console.log(touchPointX,width,progress);
        this.setState({progress:progress,});
    };
    _onPanResponderMove(event,gestureState) {
        let touchMoveX = gestureState.moveX
        let progress = touchMoveX / width;
        console.log(touchMoveX,width,progress);
        this.setState({progress:progress});

     }

页面布局

 constructor(props) {
        super(props);
        this.state = {
            progress : 0,
            _PanResponder:null

        }

    };

 render() {

        return ( 
             <View style={styles.containerStyle}>
                <ProgressViewIOS 
                style={styles.ProgressViewStyle}
                progress={this.state.progress}
                />
                <Text style={styles.textStyle}>当前百分比{Math.round(this.state.progress * 100)}%</Text>
                {/*由于progress比较小,所有用一个背景透明的view来响应事件*/}
                <View style={styles.touchViewStyle}
                {...this._PanResponder.panHandlers}
                ></View>
            </View>


        );



    };

输入图片说明代码地址:https://github.com/roycehe/react-native-100-Demos

不要的吝啬你的赞赏和☆

转载于:https://my.oschina.net/roycehe/blog/871505

相关文章:

  • DNS的搭建
  • P3-SQL 学习笔记
  • SANS:2017年网络威胁情报现状调研报告
  • 当 Node.js 遇见 Docker
  • Centos 7.0变动记录贴(持续记录)
  • vue脚手架vue-cli
  • 漫谈《大型网站技术架构》
  • SDN的概念和价值
  • jQuery.extend()参数
  • [LeetCode]Spiral Matrix
  • NOIP2016 天天爱跑步 正解
  • 如何选用持久化存储方案--一些需要考虑的问题
  • C语言求最小公倍数和最大公约数三种算法(经典)
  • 搜索:文本的匹配算法
  • 应用解决告诉你什么时候该用ajax
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Apache Pulsar 2.1 重磅发布
  • Apache的基本使用
  • Javascript编码规范
  • JavaScript函数式编程(一)
  • Java读取Properties文件的六种方法
  • MySQL几个简单SQL的优化
  • springboot_database项目介绍
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 第十八天-企业应用架构模式-基本模式
  • 基于HAProxy的高性能缓存服务器nuster
  • 简析gRPC client 连接管理
  • 浅谈web中前端模板引擎的使用
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 小李飞刀:SQL题目刷起来!
  • 写给高年级小学生看的《Bash 指南》
  • 与 ConTeXt MkIV 官方文档的接驳
  • 找一份好的前端工作,起点很重要
  • 带你开发类似Pokemon Go的AR游戏
  • 昨天1024程序员节,我故意写了个死循环~
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #微信小程序:微信小程序常见的配置传旨
  • (11)MATLAB PCA+SVM 人脸识别
  • (13)Hive调优——动态分区导致的小文件问题
  • (30)数组元素和与数字和的绝对差
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (剑指Offer)面试题34:丑数
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .bat文件调用java类的main方法
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 材料检测系统崩溃分析
  • .NET 常见的偏门问题
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换