当前位置: 首页 > wzjs >正文

微信网站建设报价单长春网长春关键词排名站设计

微信网站建设报价单,长春网长春关键词排名站设计,系统优化的目的和意义,潍坊网站建设500嗯,几天没写博客,又来了分享知识咯,博主也是菜鸡一个,有错误大家评论提出来,手下留情。 先上图: 开发环境: Mac OS 15.0.1 Android Studio Jellyfish | 2023.3.1 Patch 2 当前程序环境 compi…

嗯,几天没写博客,又来了分享知识咯,博主也是菜鸡一个,有错误大家评论提出来,手下留情。
先上图:
在这里插入图片描述

开发环境:
Mac OS 15.0.1
Android Studio Jellyfish | 2023.3.1 Patch 2
当前程序环境

compileOptions {sourceCompatibility JavaVersion.VERSION_11targetCompatibility JavaVersion.VERSION_11}kotlinOptions {jvmTarget = '11'}packaging {resources {excludes += '/META-INF/{AL2.0,LGPL2.1}'}}// 跟下面俩条件挂钩 buildFeatures {compose truebuildConfig = true}// 可选 开启 viewBinding 视图绑定viewBinding {enabled = true}// 可选 开启 dataBindingdataBinding {enabled = true}composeOptions {kotlinCompilerExtensionVersion '1.5.1'}

废话不讲,直接给代码大家。

@Composable
fun WeightGauge(weight: Float,modifier: Modifier = Modifier
) {// 状态var centerX by remember { mutableStateOf(0f) }var centerY by remember { mutableStateOf(0f) }var radius by remember { mutableStateOf(0f) }// 计算角度 (0-180度)val angle = (weight / 100f) * 180fBox(modifier = modifier) {Canvas(modifier = Modifier.fillMaxSize()) {// 保存中心点和半径centerX = size.width / 2fcenterY = size.heightradius = min(size.width / 2f, size.height) * 0.9f// 绘制灰色背景弧drawArc(color = Color(0xFFE1E6EA),startAngle = 180f,sweepAngle = 180f,useCenter = false,topLeft = Offset(centerX - radius, centerY - radius),size = Size(radius * 2, radius * 2),style = Stroke(width = 30f, cap = StrokeCap.Round))// 绘制彩色进度弧【渐变颜色】val gradientBrush = Brush.horizontalGradient(colors = listOf(Color(0xFF7832FD), // 深紫色Color(0xFFF293FA), // 淡粉色// Color(0xFF81C784)  // 可选更多颜色))// 绘制彩色进度弧drawArc(brush = gradientBrush,startAngle = 180f,sweepAngle = angle,useCenter = false,topLeft = Offset(centerX - radius, centerY - radius),size = Size(radius * 2, radius * 2),style = Stroke(width = 30f, cap = StrokeCap.Round))// 绘制刻度线 - 钟表式刻度// 总共101个刻度(0-100)for (i in 0..100) {val tickAngle = 180f - (i.toFloat() / 100f) * 180f// 确定刻度类型: 长刻度(10的倍数)、中等刻度(5的倍数)、短刻度(其他)val tickType = when {i % 10 == 0 -> 0 // 长刻度i % 5 == 0 -> 1  // 中等刻度else -> 2         // 短刻度}// 根据刻度类型设置长度和宽度val tickLength = when (tickType) {0 -> 20f  // 长刻度1 -> 15f  // 中等刻度else -> 8f // 短刻度}val strokeWidth = when (tickType) {0 -> 2.5f  // 长刻度1 -> 1.8f  // 中等刻度else -> 1f // 短刻度}val startX =centerX + (radius - 40f) * cos(Math.toRadians(tickAngle.toDouble())).toFloat()val startY =centerY - (radius - 40f) * sin(Math.toRadians(tickAngle.toDouble())).toFloat()val endX =centerX + (radius - 40f - tickLength) * cos(Math.toRadians(tickAngle.toDouble())).toFloat()val endY =centerY - (radius - 40f - tickLength) * sin(Math.toRadians(tickAngle.toDouble())).toFloat()drawLine(color = Color(0xFFFBCEFF),  // 线条颜色start = Offset(startX, startY),end = Offset(endX, endY),strokeWidth = strokeWidth)// 只为10的倍数的刻度添加数值【 绘制文本数值 】if (i % 10 == 0) {val textX =centerX + (radius - 70f) * cos(Math.toRadians(tickAngle.toDouble())).toFloat()val textY =centerY - (radius - 70f) * sin(Math.toRadians(tickAngle.toDouble())).toFloat()rotate(180f - tickAngle, Offset(textX, textY)) {drawContext.canvas.nativeCanvas.drawText((i*2).toString(),  // 这个值是表盘数值textX,textY,android.graphics.Paint().apply {color = android.graphics.Color.parseColor("#FFFBCEFF")textSize = 12.sp.toPx()textAlign = android.graphics.Paint.Align.CENTER})}}}// 计算指针角度和末端点位置val pointerAngle = 180f - angleval radians = Math.toRadians(pointerAngle.toDouble())val pointerArcEndX = centerX + radius * cos(radians).toFloat()val pointerArcEndY = centerY - radius * sin(radians).toFloat()// 在指针末端绘制一个小圆点drawCircle(color = Color(0xFFFBCEFF),radius = 15f,center = Offset(pointerArcEndX, pointerArcEndY))// 绘制固定宽度的菱形指针// 计算指针的四个关键点val pointerLength = radius * 0.8f // 指针长度val pointerWidth = 35f // 指针最宽处宽度// 指针末端(靠近弧线的尖端)val tipX = centerX + pointerLength * cos(radians).toFloat()val tipY = centerY - pointerLength * sin(radians).toFloat()// 计算垂直于指针方向的单位向量val perpRadians = radians + PI / 2val perpCos = cos(perpRadians).toFloat()val perpSin = sin(perpRadians).toFloat()// 指针中部(最宽处)距离中心的比例val midRatio = 0.4fval midX = centerX + pointerLength * midRatio * cos(radians).toFloat()val midY = centerY - pointerLength * midRatio * sin(radians).toFloat()// 指针两侧的宽度点val halfWidth = pointerWidth / 2val side1X = midX + halfWidth * perpCosval side1Y = midY - halfWidth * perpSinval side2X = midX - halfWidth * perpCosval side2Y = midY + halfWidth * perpSin// 指针起点(中心圆处)val baseX = centerXval baseY = centerY// 创建菱形路径val diamondPath = Path().apply {moveTo(tipX, tipY) // 弧线端尖点lineTo(side1X, side1Y) // 一侧宽度点lineTo(baseX, baseY) // 中心端点lineTo(side2X, side2Y) // 另一侧宽度点close()}// 绘制菱形指针填充drawPath(path = diamondPath,color = Color(0xFFFEE7AC), // 浅粉色填充style = Fill)// 绘制中心圆drawCircle(color = Color(0xFFFBCEFF), // 浅粉色radius = 40f,center = Offset(centerX, centerY))// 绘制指针边框drawPath(path = diamondPath,color = Color(0xFFFEE7AC), // 边框色style = Stroke(width = 2f))}}
}

这个代码可以直接放到Jetpack Compose项目运行,大家根据需求更改,代码注释写的很清楚了,比如改变指针颜色,指针轮廓颜色,大中小刻度颜色、宽度,半圆弧度的渐变颜色,刻度文字,半圆最大值【(i*2).toString(), // 这个值是表盘数值】等

@Preview
@Composable
fun BodyWeightSelectionSetPagePreview() {// 创建可变的 weight 状态,初始值为 50fColumn(modifier = Modifier.fillMaxSize()) {WeightGauge(weight = 0f,  modifier = Modifier.height(200.dp))Spacer(modifier = Modifier.height(21.dp))WeightGauge(weight = 50f,  modifier = Modifier.height(200.dp))Spacer(modifier = Modifier.height(21.dp))WeightGauge(weight = 100f,  modifier = Modifier.height(200.dp))}
}

要是使用了mvvm模式,就这样// 获取状态
val weightValue by viewModel.weightValue.observeAsState(50f)

博主幸劳,转载记得标注原出处链接,支持原创。

http://www.dtcms.com/wzjs/118675.html

相关文章:

  • 网站标题字符网络营销工具分析
  • 自己做的网站发布到网上河北网站seo地址
  • asp.net做的网站要放到网上空间去_要放哪些文件上去看b站二十四小时直播间
  • 东莞网站建设用哪种好模板建站常规流程
  • 长沙网站建设优化百度网站推广费用
  • 商洛 网站建设网站搜索引擎优化主要方法
  • 建设政府网站多少钱淘宝关键词优化软件
  • 网站建设力洋域名历史查询工具
  • 做系统的网站百度云资源搜索
  • 广告公司可以做网站吗线上培训机构排名前十
  • python官方网站厨师培训机构 厨师短期培训班
  • 承德网站建设报价外贸商城建站
  • 贵阳网站建设有限公司搜索引擎哪个好用
  • 如何用图片文字做网站英语seo
  • 天津建设工程协会网站论坛seo设置
  • 网站推广岗位的要求搜索引擎推广案例
  • 社区网站开发需求文档新媒体推广渠道有哪些
  • 哪个网上购物网站好营销型网站建设排名
  • 男女做爰全过程网站google搜索引擎下载
  • 网站头像设计免费制作cnn头条新闻
  • 公司签约网站品牌关键词优化哪家便宜
  • 河南做网站公司排名seo是什么
  • 网站的服务器在哪里7个经典软文营销案例
  • 河北省廊坊市建设网站网络优化师
  • 性价比最高的网站建设seo顾问多少钱
  • 网站建设设计 昆山线下推广团队
  • 深圳nft网站开发公司免费找精准客户软件
  • 怎么做微信辅助的网站文件外链生成网站
  • 金融理财网站建设方案seo查询
  • 成都建设工程安监局网站汉中网站seo