RN之處理觸摸學(xué)習(xí)

移動(dòng)應(yīng)用上的用戶交互基本靠“摸”。當(dāng)然,“摸”也是有各種姿勢(shì)的:在一個(gè)按鈕上點(diǎn)擊,在一個(gè)列表上滑動(dòng),或是在一個(gè)地圖上縮放。React Native提供了可以處理常見(jiàn)觸摸手勢(shì)(例如點(diǎn)擊或滑動(dòng))的組件,以及可用于識(shí)別更復(fù)雜的手勢(shì)的完整的手勢(shì)響應(yīng)系統(tǒng)。

顯示一個(gè)簡(jiǎn)單的按鈕

Button是一個(gè)簡(jiǎn)單的跨平臺(tái)的按鈕組件。下面是一個(gè)最簡(jiǎn)單的示例:

<Button
  onPress={()=>{
      Alert.alert("你點(diǎn)擊了按鈕!");
}}
title="點(diǎn)我!"
/>

上面這段代碼會(huì)在iOS上渲染一個(gè)藍(lán)色的標(biāo)簽狀按鈕,在Android上則會(huì)渲染一個(gè)藍(lán)色圓角矩形帶白字的按鈕。點(diǎn)擊這個(gè)按鈕會(huì)調(diào)用”onPress“函數(shù),具體作用就是顯示一個(gè)alert彈出框。你還可以指定”color“屬性來(lái)修改按鈕的顏色。



再試試下面這個(gè)使用Button的例子吧。你可以點(diǎn)擊”Tap to Play“來(lái)預(yù)覽真實(shí)效果。(下面會(huì)顯示一個(gè)嵌在網(wǎng)頁(yè)中的手機(jī)模擬器,國(guó)內(nèi)用戶可能打不開(kāi)這個(gè)網(wǎng)頁(yè)模擬器,或速度非常慢)。

import React, { Component } from 'react';
import { Alert, Button, StyleSheet, View } from 'react-native';

export default class ButtonBasics extends Component {
  _onPressButton() {
    Alert.alert('You tapped the button!')
  }

  render() {
    return (
      <View style={styles.container}>
        <View style={styles.buttonContainer}>
          <Button
            onPress={this._onPressButton}
            title="Press Me"
          />
        </View>
        <View style={styles.buttonContainer}>
          <Button
            onPress={this._onPressButton}
            title="Press Me"
            color="#841584"
          />
        </View>
        <View style={styles.alternativeLayoutButtonContainer}>
          <Button
            onPress={this._onPressButton}
            title="This looks great!"
          />
          <Button
            onPress={this._onPressButton}
            title="OK!"
            color="#841584"
          />
        </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
   flex: 1,
   justifyContent: 'center',
  },
  buttonContainer: {
    margin: 20
  },
  alternativeLayoutButtonContainer: {
    margin: 20,
    flexDirection: 'row',
    justifyContent: 'space-between'
  }
})

運(yùn)行結(jié)果如圖



Touchable系列組件

這個(gè)組件的樣式是固定的,所以如果它的外觀并不怎么搭配你的設(shè)計(jì),那就需要使用TouchableOpacity或是TouchableNativeFeedback組件來(lái)定制自己所需要的按鈕,你可以在github.com網(wǎng)站上搜索’react native button‘來(lái)看看社區(qū)其他人的作品。
具體使用哪種組件,取決于你希望給用戶什么樣的視覺(jué)反饋:

  • 一般來(lái)說(shuō),你可以使用TouchableHighlight來(lái)制作按鈕或者連接。注意此組件的背景會(huì)在用戶手指按下時(shí)變暗。
  • 在Android上還可以使用TouchableNativeFeedback,它會(huì)在用戶手指按下時(shí)行程類似墨水漣漪的視覺(jué)效果。
  • TouchableOpacity會(huì)在用戶手指按下時(shí)降低按鈕的透明度,而不會(huì)改變背景的顏色。
  • 如果你想在處理點(diǎn)擊事件的同時(shí)不顯示任何視覺(jué)反饋,則需要使用TouchableWithoutFeedback。

某些場(chǎng)景中你可能需要檢測(cè)用戶是否進(jìn)行了長(zhǎng)按操作。可以在上面列出的人已組建中使用onLongPress屬性來(lái)實(shí)現(xiàn)。
我們來(lái)看一下示例:

import React, { Component } from 'react';
import { Alert, Platform, StyleSheet, Text, TouchableHighlight, TouchableOpacity, TouchableNativeFeedback, TouchableWithoutFeedback, View } from 'react-native';

export default class Touchables extends Component {
  _onPressButton() {
    Alert.alert('You tapped the button!')
  }

  _onLongPressButton() {
    Alert.alert('You long-pressed the button!')
  }


  render() {
    return (
      <View style={styles.container}>
        <TouchableHighlight onPress={this._onPressButton} underlayColor="white">
          <View style={styles.button}>
            <Text style={styles.buttonText}>TouchableHighlight</Text>
          </View>
        </TouchableHighlight>
        <TouchableOpacity onPress={this._onPressButton}>
          <View style={styles.button}>
            <Text style={styles.buttonText}>TouchableOpacity</Text>
          </View>
        </TouchableOpacity>
        <TouchableNativeFeedback
            onPress={this._onPressButton}
            background={Platform.OS === 'android' ? TouchableNativeFeedback.SelectableBackground() : ''}>
          <View style={styles.button}>
            <Text style={styles.buttonText}>TouchableNativeFeedback</Text>
          </View>
        </TouchableNativeFeedback>
        <TouchableWithoutFeedback
            onPress={this._onPressButton}
            >
          <View style={styles.button}>
            <Text style={styles.buttonText}>TouchableWithoutFeedback</Text>
          </View>
        </TouchableWithoutFeedback>
        <TouchableHighlight onPress={this._onPressButton} onLongPress={this._onLongPressButton} underlayColor="white">
          <View style={styles.button}>
            <Text style={styles.buttonText}>Touchable with Long Press</Text>
          </View>
        </TouchableHighlight>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    paddingTop: 60,
    alignItems: 'center'
  },
  button: {
    marginBottom: 30,
    width: 260,
    alignItems: 'center',
    backgroundColor: '#2196F3'
  },
  buttonText: {
    textAlign: 'center',
    padding: 20,
    color: 'white'
  }
})

運(yùn)行結(jié)果如圖



截圖看不出效果,點(diǎn)擊各個(gè)按鈕時(shí)會(huì)出現(xiàn)不同的點(diǎn)擊效果


另一個(gè)在移動(dòng)應(yīng)用中常見(jiàn)的手勢(shì)就是滑動(dòng)。用戶會(huì)在列表中上下滑動(dòng),或是在視圖上左右滑動(dòng)。要處理這樣的手勢(shì),下面一章學(xué)習(xí)的就是如何使用滾動(dòng)視圖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 移動(dòng)應(yīng)用上的用戶交互基本靠“摸”。當(dāng)然,“摸”也是有各種姿勢(shì)的:在一個(gè)按鈕上點(diǎn)擊,在一個(gè)列表上滑動(dòng),或是在一個(gè)地圖...
    冷洪林閱讀 332評(píng)論 0 0
  • 1 UI設(shè)計(jì)基礎(chǔ) 1.1 為iOS而設(shè)計(jì) 1.1.1 iOS包含以下3條設(shè)計(jì)原則: 遵從,UI應(yīng)該有助于人們理解內(nèi)...
    Willry閱讀 3,794評(píng)論 1 48
  • React Native 進(jìn)階(一)--嵌入到Android原生應(yīng)用中、組件的生命周期、顏色、圖片、觸摸事件 嵌入...
    呼呼哥閱讀 1,430評(píng)論 0 5
  • 沒(méi)到深夜睡不著就會(huì)胡思亂想,想以前做的很多丟臉的事以前很多站在分叉路口讓我現(xiàn)在后悔的選擇,有時(shí)候也很感嘆!因?yàn)樽约?..
    張欠扁閱讀 167評(píng)論 0 0
  • 我記得小時(shí)候的夏天 外婆喜歡在晚上洗衣服 洗我的,外公和她的 有時(shí)還會(huì)有小姨和舅舅的 洗完后我喜歡和外婆一起 在月...
    阿水和綠豆閱讀 328評(píng)論 0 0

友情鏈接更多精彩內(nèi)容