Salut, j'essaie d'obtenir scrollview
alignement au centre Comme ci-dessous gif
lien
Mais incapable de le faire. Voici mon code natif de réaction pour y parvenir.
ou existe-t-il une méthode permettant de faire défiler un index particulier d'éléments scrollview comme Android?
Toute aide serait appréciée ... Merci d'avance
<ScrollView
style={[styles.imgContainer,{backgroundColor:colorBg,paddingLeft:20}]}
automaticallyAdjustInsets={false}
horizontal={true}
pagingEnabled={true}
scrollEnabled={true}
decelerationRate={0}
snapToAlignment='center'
snapToInterval={DEVICE_WIDTH-100}
scrollEventThrottle={16}
onScroll={(event) => {
var contentOffsetX=event.nativeEvent.contentOffset.x;
var contentOffsetY=event.nativeEvent.contentOffset.y;
var cellWidth = (DEVICE_WIDTH-100).toFixed(2);
var cellHeight=(DEVICE_HEIGHT-200).toFixed(2);
var cellIndex = Math.floor(contentOffsetX/ cellWidth);
// Round to the next cell if the scrolling will stop over halfway to the next cell.
if ((contentOffsetX- (Math.floor(contentOffsetX / cellWidth) * cellWidth)) > cellWidth) {
cellIndex++;
}
// Adjust stopping point to exact beginning of cell.
contentOffsetX = cellIndex * cellWidth;
contentOffsetY= cellIndex * cellHeight;
event.nativeEvent.contentOffsetX=contentOffsetX;
event.nativeEvent.contentOffsetY=contentOffsetY;
// this.setState({contentOffsetX:contentOffsetX,contentOffsetY:contentOffsetY});
console.log('cellIndex:'+cellIndex);
console.log("contentOffsetX:"+contentOffsetX);
// contentOffset={{x:this.state.contentOffsetX,y:0}}
}}
>
{rows}
</ScrollView>
Vous n'avez pas besoin d'autres bibliothèques, vous pouvez le faire avec ScrollView. Tout ce dont vous avez besoin est d'ajouter les accessoires suivants dans votre composant.
horizontal= {true}
decelerationRate={0}
snapToInterval={200} //your element width
snapToAlignment={"center"}
Vérifiez cette collation pour plus de détails sur la façon de la mettre en œuvre https://snack.expo.io/H1CnjIeDb
Il y a plusieurs options. Voici deux que j'ai essayé et fonctionne bien. Je préfère le second parce que, comme le dit la documentation "comme ListView, cela peut générer des centaines de pages sans problème de performances".
Utilisez la propriété pagingEnabled
dans ScrollView
.
const screenHeight = Dimensions.get('window').height;
class Screen extends Component {
constructor(props) {
super(props);
}
render() {
return (
<ScrollView pagingEnabled>
<Page1 style={{height: screenHeight}} />
<Page2 style={{height: screenHeight}} />
</ScrollView>
);
}
}