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

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

做網(wǎng)站公司漢獅國(guó)外b站視頻推廣網(wǎng)站

做網(wǎng)站公司漢獅,國(guó)外b站視頻推廣網(wǎng)站,建筑工程承包網(wǎng)沈陽,網(wǎng)站建設(shè)內(nèi)容介紹如何實(shí)現(xiàn)一個(gè)雙向PK進(jìn)度條 在Flutter應(yīng)用中,進(jìn)度條是一個(gè)非常常見的組件。而雙向PK進(jìn)度條則能夠展示兩個(gè)對(duì)立的數(shù)值,如對(duì)戰(zhàn)中的雙方得分對(duì)比等。本文將介紹如何實(shí)現(xiàn)一個(gè)具有雙向PK效果的進(jìn)度條,并支持豎直和斜角兩種過渡效果。 1. 需求 我…

如何實(shí)現(xiàn)一個(gè)雙向PK進(jìn)度條

在Flutter應(yīng)用中,進(jìn)度條是一個(gè)非常常見的組件。而雙向PK進(jìn)度條則能夠展示兩個(gè)對(duì)立的數(shù)值,如對(duì)戰(zhàn)中的雙方得分對(duì)比等。本文將介紹如何實(shí)現(xiàn)一個(gè)具有雙向PK效果的進(jìn)度條,并支持豎直和斜角兩種過渡效果。

1. 需求

我們需要一個(gè)自定義的雙向PK進(jìn)度條,要求如下:

  • 能夠顯示兩個(gè)對(duì)立的數(shù)值。
  • 進(jìn)度條兩端有圓角。
  • 中間過渡部分可以是豎直或者45度斜角。
  • 支持自定義顏色和高度。

2. 效果

通過我們的實(shí)現(xiàn),可以得到如下效果:

3. 實(shí)現(xiàn)思路

  1. 定義組件:創(chuàng)建一個(gè)自定義的PKProgressBar組件,包含左右兩側(cè)的數(shù)值、顏色、高度和過渡類型。
  2. 繪制左側(cè)和右側(cè)的圓角矩形:使用CustomPainter來繪制左右兩部分的圓角矩形。
  3. 處理中間過渡部分:根據(jù)過渡類型繪制豎直或者45度斜角的過渡效果。

4. 實(shí)現(xiàn)代碼

下面是實(shí)現(xiàn)雙向PK進(jìn)度條的完整代碼:

import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: const Text('雙向PK進(jìn)度條')),body: const Center(child: Padding(padding: EdgeInsets.symmetric(horizontal: 16),child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [PKProgressBar(leftValue: 75,rightValue: 150,leftColor: Colors.blue,rightColor: Colors.red,height: 20,transitionType: TransitionType.diagonal, // 設(shè)置過渡類型為斜角),SizedBox(height: 50),PKProgressBar(leftValue: 90,rightValue: 55,leftColor: Colors.brown,rightColor: Colors.green,height: 20,transitionType: TransitionType.vertical, // 設(shè)置過渡類型為豎直),],),)),),);}
}// 定義過渡類型枚舉
enum TransitionType { vertical, diagonal }class PKProgressBar extends StatelessWidget {final double leftValue;final double rightValue;final Color leftColor;final Color rightColor;final double height;final TransitionType transitionType;const PKProgressBar({super.key,required this.leftValue,required this.rightValue,required this.leftColor,required this.rightColor,this.height = 20.0,this.transitionType = TransitionType.diagonal, // 默認(rèn)過渡類型為斜角});Widget build(BuildContext context) {return CustomPaint(size: Size(double.infinity, height),painter: PKProgressPainter(leftValue: leftValue,rightValue: rightValue,leftColor: leftColor,rightColor: rightColor,transitionType: transitionType,),);}
}class PKProgressPainter extends CustomPainter {final double leftValue;final double rightValue;final Color leftColor;final Color rightColor;final TransitionType transitionType;PKProgressPainter({required this.leftValue,required this.rightValue,required this.leftColor,required this.rightColor,required this.transitionType,});void paint(Canvas canvas, Size size) {final paint = Paint()..style = PaintingStyle.fill;final double totalValue = leftValue + rightValue;final double leftWidth = (leftValue / totalValue) * size.width;final double rightWidth = (rightValue / totalValue) * size.width;final double radius = size.height / 2;// 左側(cè)帶圓角的矩形final leftRRect = RRect.fromLTRBAndCorners(0,0,leftWidth,size.height,topLeft: Radius.circular(radius),bottomLeft: Radius.circular(radius),);// 右側(cè)帶圓角的矩形final rightRRect = RRect.fromLTRBAndCorners(leftWidth,0,size.width,size.height,topRight: Radius.circular(radius),bottomRight: Radius.circular(radius),);// 繪制左側(cè)部分paint.color = leftColor;canvas.drawRRect(leftRRect, paint);// 繪制右側(cè)部分paint.color = rightColor;canvas.drawRRect(rightRRect, paint);// 根據(jù)過渡類型繪制中間部分if (transitionType == TransitionType.vertical) {// 豎直過渡final middleRect = Rect.fromLTWH(leftWidth - radius,0,2 * radius,size.height,);paint.color = rightColor;canvas.drawRect(middleRect, paint);} else if (transitionType == TransitionType.diagonal) {// 斜角過渡,形成45度斜線final leftPath = Path()..moveTo(leftWidth - size.height / 2, 0)..lineTo(leftWidth + size.height / 2, size.height)..lineTo(leftWidth - size.height / 2, size.height)..close();paint.color = leftColor;canvas.drawPath(leftPath, paint);// 斜角過渡,形成45度斜線final rightPath = Path()..moveTo(leftWidth - size.height / 2, 0)..lineTo(leftWidth, 0)..lineTo(leftWidth, size.height)..close();paint.color = rightColor;canvas.drawPath(rightPath, paint);}}bool shouldRepaint(covariant CustomPainter oldDelegate) {return false;}
}

在這個(gè)實(shí)現(xiàn)中,我們通過CustomPainter來自定義繪制PK進(jìn)度條,并根據(jù)過渡類型繪制豎直或斜角的過渡效果。通過這些代碼,你可以輕松實(shí)現(xiàn)一個(gè)具有雙向PK效果的進(jìn)度條,并根據(jù)需求調(diào)整樣式和效果。

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

相關(guān)文章:

  • 云南網(wǎng)站建設(shè)找天軟陜西seo推廣
  • django個(gè)人博客網(wǎng)站開發(fā)部署源碼寧波網(wǎng)站推廣公司價(jià)格
  • 企業(yè)網(wǎng)站優(yōu)化分為兩個(gè)方向杭州百度快照推廣
  • 洞涇做網(wǎng)站互聯(lián)網(wǎng)品牌的快速推廣
  • wordpress怎么修改代碼seo是什么平臺(tái)
  • 財(cái)務(wù)公司網(wǎng)站模板求好用的seo軟件
  • 微信網(wǎng)頁版如何識(shí)別二維碼seo平臺(tái)是什么
  • 做資訊網(wǎng)站要什么手續(xù)中國(guó)輿情在線
  • 傻瓜網(wǎng)站建設(shè)軟件蘭州網(wǎng)站seo
  • 專業(yè)的深圳網(wǎng)站建設(shè)公司免費(fèi)的seo優(yōu)化工具
  • 南京做網(wǎng)站外包省委副書記
  • 網(wǎng)站建設(shè)指導(dǎo)全國(guó)seo公司排名
  • 網(wǎng)站標(biāo)題正確書寫標(biāo)準(zhǔn)百度q3財(cái)報(bào)2022
  • 國(guó)外素材網(wǎng)站博客可以做seo嗎
  • 做網(wǎng)站怎么宣傳百度推廣怎么收費(fèi)標(biāo)準(zhǔn)
  • 鄭州網(wǎng)絡(luò)重慶seo俱樂部聯(lián)系方式
  • 河南平安建設(shè)網(wǎng)站上海網(wǎng)站建設(shè)聯(lián)系方式
  • 鞏義網(wǎng)站建設(shè)方案書營(yíng)銷網(wǎng)絡(luò)營(yíng)銷
  • 網(wǎng)站banner特效近三天發(fā)生的重要新聞
  • 網(wǎng)站主機(jī)空間企業(yè)網(wǎng)站模板html
  • 聊城建設(shè)工程質(zhì)量信息網(wǎng)站廣州網(wǎng)站排名優(yōu)化公司
  • 個(gè)人注冊(cè)的網(wǎng)站可以做公司宣傳用嗎谷歌app官方下載
  • 大豐做網(wǎng)站seo排名優(yōu)化方式方法
  • 花都營(yíng)銷型網(wǎng)站高效統(tǒng)籌疫情防控和經(jīng)濟(jì)社會(huì)發(fā)展
  • 中國(guó)十大搜索引擎網(wǎng)站網(wǎng)站推廣工具有哪些
  • python做網(wǎng)站的案例微信朋友圈推廣平臺(tái)
  • 網(wǎng)站建設(shè) 驗(yàn)收意見成人廚師短期培訓(xùn)班
  • 四川城鄉(xiāng)建設(shè)部網(wǎng)站首頁百度app推廣
  • seo網(wǎng)站編輯什么是搜索引擎銷售
  • 怎么制作公司自己網(wǎng)站黃頁網(wǎng)絡(luò)的推廣網(wǎng)站有哪些