Touchable组件
rn有提供一些比较基础的触摸组件,比如Touchable组件
-
TouchableWithoutFeedback:这个组件在点击后没有任何的视觉反馈,并且只支持一个子节点(不能为0 && 不能>1),并且该组件不支持加style样式。
<TouchableWithoutFeedback onPress={onPress}> <View style={styles.button}> <Text>click me!</Text> </View> </TouchableWithoutFeedback>delayLongPress: 从 onPressIn 开始,到 onLongPress 被调用的延迟。单位:毫秒delayPressIn: 从触摸操作开始到 onPressIn 被调用的延迟。单位:毫秒delayPressOut:从触摸操作结束开始到 onPressOut 被调用的延迟。单位:毫秒disabled:如果设为 true,则禁止此组件的一切交互hitSlop:这一属性定义了按钮的外延范围。这一范围也会使pressRetentionOffset变得更大。 注意: 触摸范围不会超过父视图的边界,也不会影响原先和本组件层叠的视图(保留原先的触摸优先级)pressRetentionOffset:在当前视图不能滚动的前提下指定这个属性,可以决定当手指移开多远距离之后,会不再激活按钮。但如果手指再次移回范围内,按钮会被再次激活。只要视图不能滚动,你可以来回多次这样的操作。确保你传入一个常量来减少内存分配。还有一些常用的事件:
onBluronFocusonLayoutonLongPressonPressonPressInonPressOut -
TouchableOpacity:当使用这个组件并点击时,组件的透明度会根据你设置的activeOpacity而变化,其中activeOpacity这个值的设定范围在0~1之间,默认值为0.2
并且该组件还有一些Apple Tv限定的属性:
-
enabled: 如果为"true",则启用动画效果。默认为"true"。 -
shiftDistanceX: X轴的位移距离 默认值2.0. -
shiftDistanceY: Y轴的位移距离 默认值2.0. -
tiltAngle: 倾斜角 默认值0.05. -
magnification: 放大 默认值1.0. -
pressMagnification: 点击区域放大 默认值1.0. -
pressDuration: 点击持续时间 默认值0.3. -
pressDelay: 点击延时 默认值0.0.<TouchableOpacity style={styles.button} onPress={this.onPress} activeOpacity={0.8}> <Text>click me!</Text> </TouchableOpacity>
-
-
TouchableHighlight:点击改组件时,不仅透明度会变低,还可以设置底层颜色,使得视图变暗或变亮。
onHideUnderlay:底层颜色被隐藏的时候调用onShowUnderlay:底层颜色被显示的时候调用underlayColor:底层颜色<TouchableHighlight activeOpacity={0.8} underlayColor="red" onPress={() => alert('Click Yesssss!')}> <MyComponent /> </TouchableHighlight>; -
TouchableNativeFeedback(仅限Android平台) :该组件利用原生状态来渲染触摸的反馈,其点击显示的背景可以通过background属性来自定义。
该属性在Android5.0以后可实现点击展示水波纹动效
属性:
background:决定在触摸反馈的时候显示什么类型的背景useForeground: 当想要在水波纹效果,并且不被背景遮盖住的时候,可以设置为true(该属性使用前需要先通过调用TouchableNativeFeedback.canUseNativeForeground() 查看是否支持,并且需要Android版本>=6.0)方法:
static SelectableBackground(rippleRadius: ?number):static SelectableBackgroundBorderless(rippleRadius: ?number):static Ripple(color: string, borderless: boolean, rippleRadius: ?number):<TouchableNativeFeedback onPress={() => { alert('Click Yesssss!') }} //设置背景为水波纹效果,颜色为红色,borderless:true则会涟漪到视图范围外 background={TouchableNativeFeedback.Ripple('red', true)}> <View style={styles.touchable}> <Text style={styles.text}>TouchableNativeFeedback</Text> </View> </TouchableNativeFeedback>ps:TouchableOpacity和TouchableHighlight属性都继承自TouchableWithoutFeedback