UNPKG

react-native-interactable-with-android-link

Version:
156 lines (151 loc) 3.9 kB
import React, { Component } from 'react'; import { StyleSheet, View, Dimensions, Image, Text, Slider, } from 'react-native'; import Animated from 'react-native-reanimated'; import Interactable from 'react-native-interactable-reanimated'; const Screen = Dimensions.get('window'); export default class NowCard extends Component { constructor(props) { super(props); this._deltaX = new Animated.Value(0); this.state = { damping: 1 - 0.7, tension: 300, }; } render() { return ( <View style={styles.container}> <Interactable.View horizontalOnly={true} snapPoints={[ { x: 360 }, { x: 0, damping: 1 - this.state.damping, tension: this.state.tension, }, { x: -360 }, ]} animatedValueX={this._deltaX} > <Animated.View style={[ styles.card, { opacity: this._deltaX.interpolate({ inputRange: [-300, 0, 300], outputRange: [0, 1, 0], extrapolateLeft: 'clamp', extrapolateRight: 'clamp', }), }, ]} > <Text style={styles.header}>Info for you</Text> <Image style={styles.image} source={require('../assets/card-photo.jpg')} /> <Text style={styles.title}>Card Title</Text> <Text style={styles.body}> This is the card body, it can be long </Text> </Animated.View> </Interactable.View> <View style={styles.playground}> <Text style={styles.playgroundLabel}>Change spring damping:</Text> <Slider key="damping" style={styles.slider} value={this.state.damping} minimumValue={0.1} maximumValue={0.6} minimumTrackTintColor={'#007AFF'} maximumTrackTintColor={'white'} thumbTintColor={'white'} onSlidingComplete={(value) => this.setState({ damping: value })} /> <Text style={styles.playgroundLabel}>Change spring tension:</Text> <Slider key="tension" style={styles.slider} value={this.state.tension} minimumValue={0.0} maximumValue={1000.0} minimumTrackTintColor={'#007AFF'} maximumTrackTintColor={'white'} thumbTintColor={'white'} onSlidingComplete={(value) => this.setState({ tension: value })} /> </View> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#efefef', }, card: { width: Screen.width - 40, backgroundColor: 'white', borderRadius: 6, marginHorizontal: 20, marginVertical: 10, shadowColor: '#7f7f7f', shadowOffset: { width: 0, height: 0 }, shadowRadius: 2, shadowOpacity: 0.4, elevation: 4, }, image: { width: Screen.width - 40, height: Screen.height <= 500 ? 70 : 150, }, header: { marginTop: 8, marginLeft: 20, height: 22, fontSize: 12, color: '#7b7b7b', overflow: 'hidden', }, title: { fontSize: 18, marginTop: 15, marginBottom: 10, marginLeft: 15, }, body: { marginBottom: 20, fontSize: 15, marginLeft: 15, color: '#7f7f7f', }, playground: { marginTop: Screen.height <= 500 ? 10 : 40, padding: 20, width: Screen.width - 40, backgroundColor: '#5894f3', alignItems: 'stretch', }, playgroundLabel: { color: 'white', fontSize: 14, fontWeight: 'bold', marginBottom: 15, }, slider: { height: 40, }, });