zoukankan      html  css  js  c++  java
  • React Native 实现水印

    一、 本博客参考react-native-WaterMark库,因为显示情况与要求不符,所以在原基础上修改一下。

    二、 遇到问题与解决方案:

    问题: 文字旋转后,边角留有空白

    解决: 将宽度扩大,使用transform进行旋转移动

    三、 现存问题

    1. 固定定位,不能像背景图一样移动

    四、 代码

    import React, {Component} from "react";
    import PropTypes from 'prop-types';
    import {Dimensions} from "react-native";
    import Svg, {G,Text,}from 'react-native-svg'
    
    let {height , width} = Dimensions.get('window')
    
    class WaterMark extends Component {
    
        constructor(props) {
            super(props)
        }
    
        render() {
            let {canvasWid , canvasHei  , txtSpace , txtLines ,  txtOriginY , txtFont , txtColor , text} = {...this.props}
            canvasWid = canvasWid + 150; // 增大宽度,防止边角留白
            let cos =  Math.cos( 270 * (180 / Math.PI))
            let space = (parseInt(txtSpace) +  (parseInt(txtFont) * 2))
            let beveling = space / cos
            let sideLength = canvasWid + canvasHei
            let rowNum =  Math.ceil(sideLength / beveling)
            let arr = []
            let y = txtOriginY
            for (let i = 0 ; i < rowNum; i++) {
                for (let j = 0; j < txtLines; j++){
                    let   x = canvasWid - canvasWid/(txtLines-1)*j
                    let svgTxt =
                        <G key={j+""+i}
                           transform= {{ rotation:-30,x:[-300,0],y:[90,0]}}   >
                            <Text
                                x = {x}
                                y={y}
                                stroke="transparent"
                                fill= {txtColor}
                                fontSize= {txtFont}
                            >{text}</Text>
                        </G>;
    
                    arr.push(svgTxt)
                }
                y = y + txtSpace
            }
            return(
                <Svg
                    pointerEvents="none"
                    height={canvasHei}
                    width={canvasWid}
                    style={{backgroundColor: 'transparent' , position: 'absolute'}}    //画布默认是透明的
                >
                    <G>{arr}</G>
                </Svg>
    
            )
        }
    }
    
    WaterMark.defaultProps = {
        canvasWid:  width ,                                                           //水印画布的宽度
        canvasHei:  height,                                                           //水印画布的高度
        txtSpace:   100,                                                              //水印文字之间的行间距
        txtLines:   4,                                                                //水印的列数
        txtOriginY: 20,                                                               //文字距离画布上边界的距离
        txtFont:    11,                                                               //水印字体大小
        txtColor:   "rgba(174,174,174,0.2)",                                          //水印字体颜色
        text:       '',                                                               //水印文字内容
    
    }
    
    WaterMark.propTypes = {
        canvasWid:  PropTypes.oneOfType([PropTypes.string , PropTypes.number]),     //水印画布的宽度
        canvasHei:  PropTypes.oneOfType([PropTypes.string , PropTypes.number]),     //水印画布的高度
        txtSpace:   PropTypes.oneOfType([PropTypes.string , PropTypes.number]),     //水印文字之间的行间距
        txtLines:   PropTypes.oneOfType([PropTypes.string , PropTypes.number]),     //水印的列数
        txtOriginY: PropTypes.oneOfType([PropTypes.string , PropTypes.number]),     //文字距离画布上边界的距离
        txtFont:    PropTypes.oneOfType([PropTypes.string , PropTypes.number]),     //水印字体大小
        txtColor:   PropTypes.string,                                               //水印字体颜色
        text:       PropTypes.string,                                               //水印文字内容
    }
    
    export {WaterMark}
    

     调用方法:

       <WaterMark text={"Ayinger水印"}></WaterMark>
    

      

  • 相关阅读:
    Android开发使用的常见第三方框架汇总
    15 个 Android 通用流行框架大全(归类)
    android布局属性大全
    Android 开源项目分类汇总
    有哪些 Android 大牛的 blog 值得推荐?
    Android Activity 知识点全面总结
    android知识点大总结
    自动生成fbi代码网站
    androidstudio 快捷键设置以及导入快捷键模版
    Android Studio调背景颜色
  • 原文地址:https://www.cnblogs.com/Ayinger/p/14629002.html
Copyright © 2011-2022 走看看