zoukankan      html  css  js  c++  java
  • Flutter中的剪裁

     

    圆形剪裁(ClipOval)

     

    new ClipOval(

        child: new SizedBox(

          100.0,

          height:100.0,

          child:  new Image.network("https://sfault-avatar.b0.upaiyun.com/206/120/2061206110-5afe2c9d40fa3_huge256",fit: BoxFit.fill,),

        ),

      ),

    圆角矩形剪裁(ClipRRect)

     

    new ClipRRect(

        borderRadius: new BorderRadius.all(

            new Radius.circular(10.0)),

        child:  new SizedBox(

          100.0,

          height:100.0,

          child:  new Image.network("https://sfault-avatar.b0.upaiyun.com/206/120/2061206110-5afe2c9d40fa3_huge256",fit: BoxFit.fill,),

        ),

      )

    矩形剪裁(ClipRect)

    这个控件需要定义clipper参数才能使用,不然没有效果。

    class _MyClipper extends CustomClipper<Rect>{

      @override

      Rect getClip(Size size) {

        return new Rect.fromLTRB(10.0, 10.0, size.width - 10.0,  size.height- 10.0);

      }

      @override

      bool shouldReclip(CustomClipper<Rect> oldClipper) {

          return true;

      }

    }

     

    new ClipRect(

                clipper: new _MyClipper(),

                child:new SizedBox(

                  100.0,

                  height:100.0,

                  child:  new Image.network("https://sfault-avatar.b0.upaiyun.com/206/120/2061206110-5afe2c9d40fa3_huge256",fit: BoxFit.fill,),

                ) ,

              ),

    路径剪裁(ClipPath)

     

    class _StarCliper extends CustomClipper<Path>{

      final double radius;

      _StarCliper({this.radius});

      /// 角度转弧度公式

      double degree2Radian(int degree) {

        return (Math.pi * degree / 180);

      }

      @override

      Path getClip(Size size) {

        double radius = this.radius;

        Path path = new Path();

        double radian = degree2Radian(36);// 36为五角星的角度

        double radius_in = (radius * Math.sin(radian / 2) / Math

            .cos(radian)); // 中间五边形的半径

        path.moveTo((radius * Math.cos(radian / 2)), 0.0);// 此点为多边形的起点

        path.lineTo((radius * Math.cos(radian / 2) + radius_in

            * Math.sin(radian)),

            (radius - radius * Math.sin(radian / 2)));

        path.lineTo((radius * Math.cos(radian / 2) * 2),

            (radius - radius * Math.sin(radian / 2)));

        path.lineTo((radius * Math.cos(radian / 2) + radius_in

            * Math.cos(radian / 2)),

            (radius + radius_in * Math.sin(radian / 2)));

        path.lineTo(

            (radius * Math.cos(radian / 2) + radius

                * Math.sin(radian)), (radius + radius

            * Math.cos(radian)));

        path.lineTo((radius * Math.cos(radian / 2)),

            (radius + radius_in));

        path.lineTo(

            (radius * Math.cos(radian / 2) - radius

                * Math.sin(radian)), (radius + radius

            * Math.cos(radian)));

        path.lineTo((radius * Math.cos(radian / 2) - radius_in

            * Math.cos(radian / 2)),

            (radius + radius_in * Math.sin(radian / 2)));

        path.lineTo(0.0, (radius - radius * Math.sin(radian / 2)));

        path.lineTo((radius * Math.cos(radian / 2) - radius_in

            * Math.sin(radian)),

            (radius - radius * Math.sin(radian / 2)));

        path.close();// 使这些点构成封闭的多边形

        return path;

      }

      @override

      bool shouldReclip(_StarCliper oldClipper) {

          return this.radius != oldClipper.radius;

      }

    }

    先定义好五角星的路径ClipRect,然后:

    new ClipPath(

        clipper: new _StarCliper(radius: 50.0),

        child:new SizedBox(

          100.0,

          height:100.0,

          child:  new Image.network("https://sfault-avatar.b0.upaiyun.com/206/120/2061206110-5afe2c9d40fa3_huge256",fit: BoxFit.fill,),

        ) ,

      )

    转载:https://segmentfault.com/a/1190000015149101?utm_source=index-hottest

  • 相关阅读:
    linux下对/sys/class/gpio中的gpio的控制
    -bash: ./reset_lgw.sh: /bin/sh^M: bad interpreter: No such file or directory
    MakeFile杂记
    MakeFile = := ?= += 的区别
    Linux 系统及编程相关知识总汇
    node-webkit开发桌面应用
    PHP 合理配置实现文件上传及保存文件到数据库
    PHP 从基础开始 ——重要知识点笔记
    Linux与Windows远程互访(使用Rdesktop与SSH)
    编程之路,开发之路,技术大全
  • 原文地址:https://www.cnblogs.com/sundaysandroid/p/13554154.html
Copyright © 2011-2022 走看看