ReactNative中的手势响应系统


本人邮箱: [lihao_iOS@hotmail.com](mailto: lihao_iOS@hotmail.com),欢迎交流讨论.
欢迎转载:转载请注明网址:http://dwz.cn/3H9kbR
Github地址: https://github.com/eggswift/


Touchable

具体实现在ResponderEventPlugin.js,reactNative为我们提供了Touchable实现。

能做什么

  • 反馈/高亮:让用户看到他们到底按到了什么东西,以及松开手后会发生什么。
  • 取消功能:当用户正在触摸操作时,应该是可以通过把手指移开来终止操作。

TouchableHighlight

本组件用于封装视图。当按下时封装的视图的不透明度会降低,同时会有一个底层的颜色透过而被用户看到,使得视图变暗或变亮。在底层实现上,实际会创建一个新的视图到视图层级中,如果使用的方法不正确,有时候会导致一些不希望出现的视觉效果。譬如没有给视图的backgroundColor显式声明一个不透明的颜色。

注意:TouchableHighlight只支持一个子节点,如果你需要设置多个子视图组件,就需要使用View节点进行包装。

属性

名称 注释
view#style 支持所有view#style属性
TouchableWithoutFeedback 支持TouchableWithoutFeedback 的所有属性
activeOpacity 高亮时view的不透明度。
onHideUnderlay 高亮隐藏时回调。
onShowUnderlay 高亮显示时回调。
underlayColor 高亮颜色

TouchableWithoutFeedback

你不需要主动去继承或直接使用TouchableWithoutFeedback组件。任何能够响应触摸或者点击的控件都应该有视觉上的反应效果。TouchableWithoutFeedback并不支持任何视觉反馈,这就是一个很大的原因,看起来像Web效果而不是原生的效果(Native)。

名称 类型 注释
accessibilityComponentType View.AccessibilityComponentType 设置可访问的组件类型
accessibilityTraits View.AccessibilityTraits 设置访问特征
accessible bool 设置当前组件是否可以访问
delayLongPress number 设置延迟的时间,单位为毫秒。从onPressIn方法开始,到 onLongPress被调用这一段时间
delayPressIn number 设置延迟的时间,单位为毫秒,从用户触摸控件开始到onPressIn被调用这一段时间
delayPressOut number 设置延迟的时间,单位为毫秒,从用户触摸事件释放开始到onPressOut被调用这一段时间
onLayout function 当组件加载或者改组件的布局发生变化的时候调用。调用传入的参数为{nativeEvent:{layout:{x,y,width,height}}}
onLongPress function 当用户长时间按压组件(长按效果)的时候调用该方法
onPress function 当用户点击的时候调用(触摸结束)。 但是如果事件被取消了就不会调用。(例如:当前被滑动事件所替代)
onPressIn function 用户开始触摸组件回调方法
onPressOut function 用户完成触摸组件之后回调方法
pressRetentionOffset {top: ,left: ,bottom: ,right: } 该设置当视图滚动禁用的情况下,可以定义当手指距离组件的距离。当大于该距离该组件会失去响应。当少于该距离的时候,该组件会重新进行响应。确保你传入一个常量来减少内存分配。

注意:TouchableWithoutFeedback 和 TouchableHighlight 一样只支持一个子节点,如果你需要设置多个子视图组件,就需要使用View节点进行包装。

示例


/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Touchable,
    TouchableHighlight,
    TouchableNativeFeedback,
    TouchableWithoutFeedback,
    TouchableOpacity,
} from 'react-native';

class GestureDemo extends Component {

  render() {
    return (
      <View style = {styles.container}>
        <TouchableHighlight style={styles.touchable}
                            activeOpacity={0.3}
                            underlayColor={'#FF00FF'}
                            onPressIn={this._onPressIn}
                            onPressOut={this._onPressOut}
                            onPress={this._onPress}
                            onLongPress={this._onLongPress}>
          <View style={styles.button}></View>
        </TouchableHighlight>
      </View>
    );
  }

  _onPressIn() {
    this.start = Date.now()
    console.log("press in")
  }
  _onPressOut() {
    console.log("press out")
  }
  _onPress() {
    console.log("press")
  }
  _onLongPress() {
    console.log("press long" + (Date.now() - this.start))
  }
}

const styles = StyleSheet.create({
    container: {
      flex: 1,
      justifyContent: 'center',
      alignItems: 'center',
      backgroundColor: '#F5F5F5',
    },
    button: {
      width: 160,
      height: 160,
    },
    touchable: {
      backgroundColor: 'red',
      shadowColor: 'black',
      shadowRadius: 10,
      shadowOpacity: 0.3,
      shadowOffset: {width: 2, height: 2},
    },
});

AppRegistry.registerComponent('GestureDemo', () => GestureDemo);


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • Touchable系列组件 为了能让视图能够响应用的的点击事件,我们需要借助Touchablexxx组件,来包裹我...
    基本密码宋阅读 5,576评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,411评论 25 707
  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 3,817评论 1 22
  • <1> 第一次自己出来租房子,刚好可以实现装修房间的小愿望。从八月底拿到这两室一厅的钥匙,两室一厅一厨一卫,全部都...
    DaisRoy阅读 303评论 0 0
  • 你坐在落叶堆上, 被果子砸醒了臆想。 你不曾忘记, 当他看到你,毫无思索,径直走来。 这埋葬岁月的六捧土, 恰如,...
    季熙河阅读 341评论 0 5