【问题标题】:Make TouchableOpacity not highlight element when starting to scroll [React Native]开始滚动 [React Native] 时使 TouchableOpacity 不突出显示元素
【发布时间】:2016-10-03 07:16:43
【问题描述】:

TouchableOpacity 让事情变得可触摸,或者正如 React Native 所说:

使视图正确响应触摸的包装器。

但是在 ScrollViewListView 中使用它会导致我们(或至少我)不想要它时突出显示。

这是向下滚动填充元素的ListView 所涉及的三个步骤:

  • 触摸一个元素
  • 手指向上移动
  • 松开手指

触摸元素会立即产生高亮动画。但在这种情况下,我们只想滚动。我们不想对该元素做任何事情,无论是突出显示还是打开详细视图等。

这种情况不会一直发生,但大多数时候发生在我的 Android 设备上。

什么是正确的处理方法?

【问题讨论】:

  • 出于兴趣,将滚动视图包装在可触摸高亮中的用例是什么?
  • 事实并非如此。我们将TouchableOpacity 元素inside 包裹在ScrollView

标签: javascript react-native listview scroll scrollview


【解决方案1】:

你可以使用delayPressIn={1000},它会延迟动画直到你按下1秒。

delayPressIn 属性 <TouchableOpacity> 延迟毫秒,从触摸开始到调用 onPressIn 之前。

使用示例:

<FlatList
  horizontal
  contentContainerStyle={{ paddingRight: 16 }}   // this set the padding to last item
  showsHorizontalScrollIndicator={false}         // hide the scroller
  data={results}
  keyExtractor={(result) => result.data.id}
  renderItem={({ item }) => {
    return (
      <TouchableOpacity
        delayPressIn={1000}         // delay animation for 1 second
        onPress={() => navigation.navigate('ResultsShow')}
      >
        <ResultsDetail result={item.data} />
      </TouchableOpacity>
    );
  }}
/>;

您可以找到有关此Here 的更多信息。

【讨论】:

    【解决方案2】:

    滚动手势应该取消TouchableOpacity 触摸响应,但如果您认为TouchableOpacity 突出显示被提前触发,您可以尝试调整delayPressIn 属性。

    【讨论】:

    • 谢谢。我没有考虑 TouchableWithoutFeedback 道具。现在我将delayPressIn 设置为一个非常高的数字,因为我不希望在按住按钮时出现该动画。但感觉并不完全正确。从长远来看,我想我需要一个自定义的突出显示动画来进行点击、按住和长按。
    • 感谢delayPressIn 运行良好,我将我的设置为50,这似乎适合我的滑动手势。
    • 伙计,我现在非常爱你。我不知道为什么这个道具。没有记录。 React-Native 在文档方面是一团糟。现在我可以停止使用有问题的 TouchableHighlight(它对边框和图像效果非常糟糕)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2010-10-29
    相关资源
    最近更新 更多