中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做特價(jià)的網(wǎng)站網(wǎng)絡(luò)推廣運(yùn)營(yíng)優(yōu)化

做特價(jià)的網(wǎng)站,網(wǎng)絡(luò)推廣運(yùn)營(yíng)優(yōu)化,如何通過做網(wǎng)站掙錢,那些網(wǎng)站分享pr做的視頻軟件之前用 Flutter Canvas 畫過一個(gè)三角三角形,html 的 Canvas 也畫過一次類似的, 今天用 Flutter Canvas 試了下 感覺差不多: html 版本 大致效果如下: 思路和 html 實(shí)現(xiàn)的類似: 也就是找出點(diǎn)的位置,使用二階…

之前用 Flutter Canvas 畫過一個(gè)三角三角形,html 的 Canvas 也畫過一次類似的, 今天用 Flutter Canvas 試了下 感覺差不多:

html 版本

大致效果如下:

思路和 html 實(shí)現(xiàn)的類似:

也就是找出點(diǎn)的位置,使用二階貝塞爾曲線實(shí)現(xiàn):

?代碼如下:
import 'package:flutter/material.dart';class PageCanvas extends StatefulWidget {const PageCanvas({Key? key}) : super(key: key);@overrideState<PageCanvas> createState() => _PageCanvasState();
}class _PageCanvasState extends State<PageCanvas> with TickerProviderStateMixin {late Animation<double> animation;late AnimationController controller;@overridevoid initState() {// TODO: implement initStatesuper.initState();controller = AnimationController(duration: const Duration(milliseconds: 2000), vsync: this);animation = Tween<double>(begin: 0, end: 1).animate(controller);controller.repeat();}@overrideWidget build(BuildContext context) {Size size = MediaQuery.of(context).size;return Scaffold(appBar: AppBar(title: const Text('Canvas'),backgroundColor: Colors.blue,),body: Column(children: [AnimatedBuilder(animation: controller,builder: (context, widget) {return CustomPaint(size: Size(size.width, size.height / 3),painter: MyPainter(animation.value),);}),const SizedBox(height: 60,),Center(child: SizedBox(// color: Colors.grey,width: 200,height: 200,child: ClipOval(child: Container(color: Colors.grey.withOpacity(0.3),child: AnimatedBuilder(animation: controller,builder: (context, widget) {return CustomPaint(size: Size(size.width, size.height / 3),painter: MyPainter2(animation.value),);}),),),),)],),);}@overridevoid dispose() {controller.dispose();// TODO: implement disposesuper.dispose();}
}class MyPainter extends CustomPainter {final double value;const MyPainter(this.value);@overridevoid paint(Canvas canvas, Size size) {// print(value);Paint paint = Paint();Path path = Path();double positionX = -size.width * value;double positionY = 100;double positionRange = 10;double positionX2 = -size.width * (1 - value);double positionY2 = 110;double positionRange2 = 20;double positionX3 = -size.width * (1.3 - value);double positionY3 = 120;double positionRange3 = 30;double step = size.width / 4;//path.moveTo(0 + positionX, positionY);for (int i = 1; i < 13; i++) {if (i % 2 == 1) {path.quadraticBezierTo(step * (2 * i - 1) + positionX,positionY - positionRange, step * (2 * i) + positionX, positionY);} else {path.quadraticBezierTo(step * (2 * i - 1) + positionX,positionY + positionRange, step * (2 * i) + positionX, positionY);}}path.lineTo(step * 10, 250);path.lineTo(0, 250);path.close();paint.color = Colors.blue.withOpacity(0.2);canvas.drawPath(path, paint);canvas.save();canvas.restore();path = Path();path.moveTo(0 + positionX2, positionY2);for (int i = 1; i < 13; i++) {if (i % 2 == 1) {path.quadraticBezierTo(step * (2 * i - 1) + positionX2,positionY2 - positionRange2,step * (2 * i) + positionX2,positionY2);} else {path.quadraticBezierTo(step * (2 * i - 1) + positionX2,positionY2 + positionRange2,step * (2 * i) + positionX2,positionY2);}}path.lineTo(step * 10, 250);path.lineTo(0, 250);path.close();paint.color = Colors.blue.withOpacity(0.6);canvas.drawPath(path, paint);canvas.save();canvas.restore();path = Path();path.moveTo(0 + positionX3, positionY3);for (int i = 1; i < 13; i++) {if (i % 2 == 1) {path.quadraticBezierTo(step * (2 * i - 1) + positionX3,positionY3 - positionRange3,step * (2 * i) + positionX3,positionY3);} else {path.quadraticBezierTo(step * (2 * i - 1) + positionX3,positionY3 + positionRange3,step * (2 * i) + positionX3,positionY3);}}path.lineTo(step * 10, 250);path.lineTo(0, 250);path.close();paint.color = Colors.blue;canvas.drawPath(path, paint);}@overridebool shouldRepaint(covariant CustomPainter oldDelegate) {// TODO: implement shouldRepaintreturn oldDelegate != this;//return true;}
}class MyPainter2 extends CustomPainter {final double value;const MyPainter2(this.value);@overridevoid paint(Canvas canvas, Size size) {// print(value);Paint paint = Paint();Path path = Path();double positionX = -size.width * value;double positionY = 50;double positionRange = 10;double positionX2 = -size.width * (1 - value);double positionY2 = 60;double positionRange2 = 20;double positionX3 = -size.width * (1.3 - value);double positionY3 = 70;double positionRange3 = 30;double step = size.width / 4;//path.moveTo(0 + positionX, positionY);for (int i = 1; i < 13; i++) {if (i % 2 == 0) {path.quadraticBezierTo(step * (2 * i - 1) + positionX,positionY - positionRange, step * (2 * i) + positionX, positionY);} else {path.quadraticBezierTo(step * (2 * i - 1) + positionX,positionY + positionRange, step * (2 * i) + positionX, positionY);}}path.lineTo(step * 10, 250);path.lineTo(0, 250);path.close();paint.color = Colors.blue.withOpacity(0.2);canvas.drawPath(path, paint);canvas.save();canvas.restore();path = Path();path.moveTo(0 + positionX2, positionY2);for (int i = 1; i < 13; i++) {if (i % 2 == 0) {path.quadraticBezierTo(step * (2 * i - 1) + positionX2,positionY2 - positionRange2,step * (2 * i) + positionX2,positionY2);} else {path.quadraticBezierTo(step * (2 * i - 1) + positionX2,positionY2 + positionRange2,step * (2 * i) + positionX2,positionY2);}}path.lineTo(step * 10, 250);path.lineTo(0, 250);path.close();paint.color = Colors.blue.withOpacity(0.6);canvas.drawPath(path, paint);canvas.save();canvas.restore();path = Path();path.moveTo(0 + positionX3, positionY3);for (int i = 1; i < 13; i++) {if (i % 2 == 0) {path.quadraticBezierTo(step * (2 * i - 1) + positionX3,positionY3 - positionRange2,step * (2 * i) + positionX3,positionY3);} else {path.quadraticBezierTo(step * (2 * i - 1) + positionX3,positionY3 + positionRange2,step * (2 * i) + positionX3,positionY3);}}path.lineTo(step * 10, 250);path.lineTo(0, 250);path.close();paint.color = Colors.blue;canvas.drawPath(path, paint);canvas.save();canvas.restore();}@overridebool shouldRepaint(covariant CustomPainter oldDelegate) {// TODO: implement shouldRepaintreturn oldDelegate != this;//return true;}
}

http://www.risenshineclean.com/news/22174.html

相關(guān)文章:

  • 做相冊(cè)哪個(gè)網(wǎng)站好用長(zhǎng)沙本地推廣
  • 凡客優(yōu)品家居官方網(wǎng)站網(wǎng)站模板設(shè)計(jì)
  • 南昌做公司網(wǎng)站哪家好優(yōu)化是什么意思
  • 網(wǎng)站建設(shè)發(fā)展歷程重慶seo研究中心
  • 用什么做flash游戲下載網(wǎng)站優(yōu)化防疫措施
  • 長(zhǎng)沙網(wǎng)站制作收費(fèi)明細(xì)表網(wǎng)站宣傳文案
  • 新手學(xué)做網(wǎng)站要多久pc網(wǎng)站優(yōu)化排名
  • 怎么做網(wǎng)站背景圖片seo網(wǎng)站優(yōu)化工具
  • 寧波品牌網(wǎng)站制作哪家好合肥百度競(jìng)價(jià)推廣代理公司
  • 盤錦網(wǎng)站建設(shè)價(jià)位軟件開發(fā)網(wǎng)站
  • 專門做外貿(mào)的網(wǎng)站有哪些怎樣在百度上發(fā)布廣告
  • 單位網(wǎng)站建設(shè)申請(qǐng)seo1新地址在哪里
  • 網(wǎng)站上傳文件不大于5M定么做百度收錄怎么查詢
  • 蛋糕網(wǎng)站內(nèi)容規(guī)劃網(wǎng)絡(luò)營(yíng)銷工程師是做什么的
  • 購(gòu)物網(wǎng)站建設(shè)的可行性內(nèi)部?jī)?yōu)化
  • 天津自貿(mào)區(qū)建設(shè)局網(wǎng)站關(guān)鍵詞出價(jià)計(jì)算公式
  • 傳媒公司做網(wǎng)站條件百度關(guān)鍵詞推廣方案
  • 機(jī)械行業(yè)營(yíng)銷型網(wǎng)站成都搜狗seo
  • 自己做銷售獨(dú)立網(wǎng)站網(wǎng)站運(yùn)營(yíng)及推廣方案
  • dw不用代碼做網(wǎng)站網(wǎng)絡(luò)營(yíng)銷的推廣方法
  • 西安優(yōu)秀的集團(tuán)門戶網(wǎng)站建設(shè)服務(wù)商長(zhǎng)沙網(wǎng)站推廣
  • 石家莊網(wǎng)站建設(shè)求職簡(jiǎn)歷怎么申請(qǐng)網(wǎng)站空間
  • 甘孜商城網(wǎng)站建設(shè)seo實(shí)戰(zhàn)培訓(xùn)機(jī)構(gòu)
  • 沒有外貿(mào)網(wǎng)站 如果做外貿(mào)專業(yè)網(wǎng)絡(luò)推廣
  • 網(wǎng)站子頁面如何做seo經(jīng)典模板網(wǎng)站建設(shè)
  • 網(wǎng)站如何做才能被360收錄營(yíng)銷推廣軟件
  • 個(gè)人企業(yè)網(wǎng)站怎么建設(shè)seo外鏈資源
  • 網(wǎng)站續(xù)費(fèi)收多少合適營(yíng)銷手段有哪些
  • 扁平化企業(yè)網(wǎng)站模板賬號(hào)權(quán)重查詢?nèi)肟谡鹃L(zhǎng)工具
  • 網(wǎng)站信息向上滾動(dòng)標(biāo)簽網(wǎng)頁設(shè)計(jì)與制作代碼成品