从零学React Native之09可触摸组件

可触摸组件有:
TouchableHighlight,TouchableNativeFeedback,TouchableOpacity,TouchableWithoutFeedback
1. TouchableWithoutFeedback,在用户触摸的时候没有反馈任何触摸效果,体验很不好,基本很少使用.
2. TouchableNativeFeedback 是Android操作系统专用组件,使用原生控件相应的状态来展示,比如5.0以上产生涟漪效果.
3. TouchableHighlight与TouchableOpacity都产生视觉效果,其中TouchableOpacity是四者中使用最多的.

TouchableHighlight

当一个组件成为TouchableHighlight组件的子组件后,这个组件触摸时会产生一种变暗的效果,原理就是让被子组件遮盖住的下一层颜色向上透出来,这样就使子组件变暗或颜色,默认透传上来是黑色,可以通过underlayColor指定透传的颜色。activeOpacity属性可以指定透明度. 默认是0.8。
TouchableHighlight 还有一个bug,来看下面的代码:

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

class AwesomeProject extends Component {
    render() {
        return (
            //根View
            <View style={{flex:1,backgroundColor:'white'}}>
               <TouchableHighlightonPress={this.buttonPressed}>
                   <View style={{width:120,height:70,backgroundColor:'grey'}}/>
                   </TouchableHighlight>
            </View>
        );
    }
    buttonPressed(){
       console.log("press");
    }
}

按下前效果:

按下的效果:

可以看到右侧不应该变暗的地方也变暗了, 这个可以在右侧增加一些其他需要显示的组件,或者为整个背景加个图片就可以解决。 当然还是建议大家使用TouchableOpacity。

TouchableOpacity

当一个组件成为TouchableOpacity组件的子组件后,这个组件被触摸时会变成半透明的组件,通过activeOpacity 控制透明度,默认是0.2 。
修改上面的代码:

...
    render() {
        return (
            //根View
            <View style={{flex:1,backgroundColor:'white'}}>
               <TouchableOpacity onPress={this.buttonPressed}>
                   <View style={{width:120,backgroundColor:'grey'}}/>
                </TouchableOpacity>
            </View>
        );
    }
  ...

TouchableOpacity按下效果:

回调函数和其它属性

  1. onPress 点击事件回调函数
  2. onLongPress 长按事件
  3. delayLongPress 设置长按事件的时长是多少毫米 默认是500ms
  4. delayPressOut 设置离开屏幕多少毫秒后 onPressOut事件被激活,默认是0
  5. delayPressIn 设置手指触摸屏幕多少毫米厚,onPressIn事件被激活,默认是0

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...