【ReactNative】react-native-mapsで地図上に被せてボタンを表示する
概要
先日【ReactNative】react-native-mapsを導入するという記事を書いて、react-native-maps
を導入しました。
しかしながら、大概のアプリは地図を表示する+何かしらのUIを重ねて表示するのではないでしょうか?
例えば下の画像のように、地図の右上に検索ボタンを設置する等です。
今回は、react-native-maps
のMapView
に独自のUIを重ねて表示させた時のコードを紹介します。
バージョン情報
"react-native": "0.61.5",
"react-native-maps": "^0.26.1",
"native-base": "^2.13.8",
コード
"react-native": "0.61.5",
"react-native-maps": "^0.26.1",
"native-base": "^2.13.8",
まずボタンのコンポーネントを作ります。
View
のスタイルをabsolute
かつright : '0%'
とすることで常に右上に来るようにします。
内部のButton
側で適宜margin
を取ったりして表示を調節しましょう。
複数のボタンを横並び、縦並びにさせることもできます。
import React from 'react';
import { StyleSheet } from 'react-native';
import { Text, View, Button, Icon } from 'native-base';
// 地図の右上に表示する用のコンポーネント(FC)
const ButtonView : React.FC<{onPressIcon : () => void}> = (props : {onPressIcon : () => void}) => {
return (
<View style={{position : 'absolute', right : '0%'}}>
<Button style={{margin : 5}} onPress={props.onPressIcon} >
<Icon type='FontAwesome5' name='search' />
</Button>
</View>
);
}
export default ButtonView;
あとはButtonView
をMapView
に重ねるだけです。
MapView
のスタイルをStyleSheet.absoluteFillObject
にするのを忘れずに。
import React from 'react';
import { StyleSheet, Alert } from 'react-native';
import MapView from 'react-native-maps';
import { Container } from 'native-base';
import ButtonView from './ButtonView';
class MapComponent extends React.PureComponent<{}> {
constructor(props : {}) {
super(props);
}
render() {
return (
<Container>
<MapView style={{...StyleSheet.absoluteFillObject}} />
<ButtonView onPressIcon={()=>{ Alert.alert("アイコンをタップしたよ!!") }} />
</Container>
);
}
}
export default MapComponent;
おわりに
今回は地図右上に独自のコンポーネントを表示する例を紹介しました。
ちょっと手を加えれば、左上や下部、あるいは真ん中に表示させることも可能です。
Author And Source
この問題について(【ReactNative】react-native-mapsで地図上に被せてボタンを表示する), 我々は、より多くの情報をここで見つけました https://qiita.com/nekoniki/items/b3d32eb07b35eabb076a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .