Как реализовать кнопку изображения круга с ответом на родной

Там. Когда я пытался создать круглую форму с компонентом React Native. Я установил borderRadius изображения наполовину значение его высоты и ширины, чтобы оно выглядело как кнопка круга и применило к нему ответ жестов. В результате, когда я постучал за пределы круга, но внутри некоторой прямоугольной области вокруг изображения, событие ответчика, которое неожиданно.

Я просто не могу понять:

Есть ли возможность определить зону касания Touchable * и как? Поддерживает ли система респондера жестов определенное определение жестов области? Любая помощь будет оценена!

Ответы

Ответ 1

попробуйте следующее:

 <TouchableOpacity
   style={{
       borderWidth:1,
       borderColor:'rgba(0,0,0,0.2)',
       alignItems:'center',
       justifyContent:'center',
       width:100,
       height:100,
       backgroundColor:'#fff',
       borderRadius:100,
     }}
 >
   <Icon name={"chevron-right"}  size={30} color="#01a699" />
 </TouchableOpacity>

Ответ 2

Вам нужно применить стиль к области Touchable, а также к изображению, если вы не хотите, чтобы внешняя сторона изображения была осязаемой.

Первое изображение имеет только изображение Touchable, а второе - только стилирует изображение, оставляя весь прямоугольник осязаемым.

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Image,
  TouchableHighlight
} = React;

var SampleApp = React.createClass({
  render: function() {
    return (
      <View style={styles.container}>
       <Text style={{ fontSize:22 }}>Only image clickable</Text>
       <TouchableHighlight style={ styles.imageContainer }>
            <Image style={ styles.image } source={{ uri: 'http://www.free-avatars.com/data/media/37/cat_avatar_0597.jpg' }} />
       </TouchableHighlight> 
       <Text style={{ fontSize:22 }}>Entire Row Clickable</Text>
       <TouchableHighlight style={ styles.imageContainer2 }>
            <Image style={ styles.image } source={{ uri: 'http://www.free-avatars.com/data/media/37/cat_avatar_0597.jpg' }} />
       </TouchableHighlight> 
      </View>  
    );
  }
}); 

var styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop:60
  },
  imageContainer: {
    height:128,
    width: 128,
    borderRadius: 64
  },
  image: {
    height:128,
    width: 128,
    borderRadius: 64
  },
  imageContainer2: {

  }
});

AppRegistry.registerComponent('SampleApp', () => SampleApp);