本人郵箱: [lihao_iOS@hotmail.com](mailto: lihao_iOS@hotmail.com),歡迎交流討論.
歡迎轉(zhuǎn)載:轉(zhuǎn)載請注明網(wǎng)址:http://dwz.cn/3H9kbR
Github地址: https://github.com/eggswift/
Touchable
具體實現(xiàn)在ResponderEventPlugin.js
鸯隅,reactNative為我們提供了Touchable
實現(xiàn)。
能做什么
- 反饋/高亮:讓用戶看到他們到底按到了什么東西米丘,以及松開手后會發(fā)生什么。
- 取消功能:當(dāng)用戶正在觸摸操作時糊啡,應(yīng)該是可以通過把手指移開來終止操作拄查。
TouchableHighlight
本組件用于封裝視圖。當(dāng)按下時封裝的視圖的不透明度會降低棚蓄,同時會有一個底層的顏色透過而被用戶看到堕扶,使得視圖變暗或變亮。在底層實現(xiàn)上梭依,實際會創(chuàng)建一個新的視圖到視圖層級中稍算,如果使用的方法不正確,有時候會導(dǎo)致一些不希望出現(xiàn)的視覺效果役拴。譬如沒有給視圖的backgroundColor顯式聲明一個不透明的顏色糊探。
注意:TouchableHighlight只支持一個子節(jié)點,如果你需要設(shè)置多個子視圖組件河闰,就需要使用View節(jié)點進(jìn)行包裝科平。
屬性
名稱 | 注釋 |
---|---|
view#style | 支持所有view#style屬性 |
TouchableWithoutFeedback | 支持TouchableWithoutFeedback 的所有屬性 |
activeOpacity | 高亮?xí)rview的不透明度。 |
onHideUnderlay | 高亮隱藏時回調(diào)姜性。 |
onShowUnderlay | 高亮顯示時回調(diào)瞪慧。 |
underlayColor | 高亮顏色 |
TouchableWithoutFeedback
你不需要主動去繼承或直接使用TouchableWithoutFeedback組件。任何能夠響應(yīng)觸摸或者點擊的控件都應(yīng)該有視覺上的反應(yīng)效果部念。TouchableWithoutFeedback并不支持任何視覺反饋汞贸,這就是一個很大的原因,看起來像Web效果而不是原生的效果(Native)印机。
名稱 | 類型 | 注釋 |
---|---|---|
accessibilityComponentType | View.AccessibilityComponentType | 設(shè)置可訪問的組件類型 |
accessibilityTraits | View.AccessibilityTraits | 設(shè)置訪問特征 |
accessible | bool | 設(shè)置當(dāng)前組件是否可以訪問 |
delayLongPress | number | 設(shè)置延遲的時間矢腻,單位為毫秒。從onPressIn方法開始射赛,到 onLongPress被調(diào)用這一段時間 |
delayPressIn | number | 設(shè)置延遲的時間多柑,單位為毫秒,從用戶觸摸控件開始到onPressIn被調(diào)用這一段時間 |
delayPressOut | number | 設(shè)置延遲的時間楣责,單位為毫秒竣灌,從用戶觸摸事件釋放開始到onPressOut被調(diào)用這一段時間 |
onLayout | function | 當(dāng)組件加載或者改組件的布局發(fā)生變化的時候調(diào)用。調(diào)用傳入的參數(shù)為{nativeEvent:{layout:{x,y,width,height}}} |
onLongPress | function | 當(dāng)用戶長時間按壓組件(長按效果)的時候調(diào)用該方法 |
onPress | function | 當(dāng)用戶點擊的時候調(diào)用(觸摸結(jié)束)秆麸。 但是如果事件被取消了就不會調(diào)用初嘹。(例如:當(dāng)前被滑動事件所替代) |
onPressIn | function | 用戶開始觸摸組件回調(diào)方法 |
onPressOut | function | 用戶完成觸摸組件之后回調(diào)方法 |
pressRetentionOffset | {top: ,left: ,bottom: ,right: } | 該設(shè)置當(dāng)視圖滾動禁用的情況下,可以定義當(dāng)手指距離組件的距離沮趣。當(dāng)大于該距離該組件會失去響應(yīng)屯烦。當(dāng)少于該距離的時候,該組件會重新進(jìn)行響應(yīng)。確保你傳入一個常量來減少內(nèi)存分配驻龟。 |
注意:TouchableWithoutFeedback 和 TouchableHighlight 一樣只支持一個子節(jié)點温眉,如果你需要設(shè)置多個子視圖組件,就需要使用View節(jié)點進(jìn)行包裝翁狐。
示例
/**
* 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);