我用AI学Android Jetpack Compose之入门篇(1)

这篇我们先来跑通第一个Android Jetpack Compose工程,现在新版本的Android Studio,新建工程选择Empty Activity默认就会开启Jetpack Compose的支持,再次声明,答案来自 通义千问Ai

文章目录

  • 1.用Android Jetpack Compose需要安装什么开发环境?
  • 2.我有基本的Android Studio环境,告诉我怎么创建Android Jetpack Compose工程?
      • 创建新的Jetpack Compose项目
      • 添加Jetpack Compose依赖(如果需要)
      • 运行你的第一个Jetpack Compose应用
  • 3.我的Android Studio找不到Empty Compose Activity,怎么办?
      • 1. **检查Android Studio版本**
      • 2. **确认插件已安装**
      • 3. **手动添加Jetpack Compose支持**
        • 创建普通项目
        • 修改`build.gradle`文件
        • 将XML布局转换为Compose函数
      • 4. **重启并清理项目**
  • 4.我纠正你一下,我用的是Android Studio Giraffe | 2022.3.1 Patch 1,我新建工程,选Empty Activity,默认就是Compose
      • 确认项目配置
      • 探索和学习
  • 5.怎么运行这个应用?
      • 1. **确认开发环境**
      • 2. **连接目标设备**
      • 3. **选择目标设备**
      • 4. **构建并运行应用**
      • 5. **查看结果**
      • 6. **调试与日志**
      • 示例步骤

1.用Android Jetpack Compose需要安装什么开发环境?

使用Android Jetpack Compose进行开发,你需要设置一个适当的开发环境。以下是详细的步骤和需要安装的工具:

  1. 安装Java Development Kit (JDK)

    • 虽然Jetpack Compose主要基于Kotlin,但Android开发仍然依赖于Java环境。确保你已经安装了最新版本的OpenJDK或Oracle JDK(通常推荐使用OpenJDK)。你可以通过命令行检查是否已安装以及其版本号:java -version
  2. 安装Android Studio

    • Android Studio是官方支持的集成开发环境(IDE),它为Jetpack Compose提供了最佳的支持。确保下载并安装最新稳定版本的Android Studio,因为它会包含最新的Jetpack Compose插件和其他必要的工具。
      • 你可以从Android Studio官网获取安装包。
  3. 配置Android SDK

    • 在安装Android Studio的过程中,会自动为你配置好Android SDK。如果你选择了自定义安装,确保选择了“Android SDK”选项。此外,确保你的SDK版本是最新的,并且包含了构建Jetpack Compose应用所需的API级别。
  4. 启用Jetpack Compose支持

    • 安装完成后,在Android Studio中创建新项目时可以选择使用Jetpack Compose模板。如果已有项目想要添加Compose支持,可以通过修改build.gradle文件来添加必要的依赖项。例如:
      dependencies {implementation "androidx.compose.ui:ui:1.0.0" // 或者更新到最新版本implementation "androidx.compose.material:material:1.0.0"implementation "androidx.compose.ui:ui-tooling-preview:1.0.0"debugImplementation "androidx.compose.ui:ui-tooling:1.0.0"
      }
      
  5. 安装必要的Gradle插件

    • 确保你的项目的build.gradle文件中包含了正确的Gradle插件,如com.android.applicationorg.jetbrains.kotlin.android,并且它们的版本是最新的。这将确保你可以正确地编译和支持Jetpack Compose的应用程序。
  6. 设置虚拟设备或连接真实设备

    • 使用Android Studio自带的AVD Manager(Android Virtual Device Manager)创建和管理模拟器,或者直接连接一个真实的Android设备用于测试。为了使Jetpack Compose的功能得到最好的表现,建议使用支持GPU加速的较新版本Android系统的设备或模拟器。
  7. 探索Jetpack Compose示例代码和文档

    • 最后,不要忘记利用官方提供的Jetpack Compose示例项目和文档来学习和参考。Google经常更新这些资源,以反映最新的实践和技术进步。

完成以上步骤后,你应该已经准备好开始使用Jetpack Compose进行开发了。记得定期检查是否有新的更新,保持你的开发环境处于最新状态。

2.我有基本的Android Studio环境,告诉我怎么创建Android Jetpack Compose工程?

既然你已经有了基本的Android Studio环境,创建一个支持Jetpack Compose的新项目就相对简单了。以下是详细的步骤来引导你完成这个过程:

创建新的Jetpack Compose项目

  1. 启动Android Studio

    • 打开你的Android Studio。
  2. 选择“Start a new Android Studio project”

    • 在欢迎界面中选择“Start a new Android Studio project”以开始一个新的项目。
  3. 选择模板

    • 在“Choose your project”页面,你会看到多个应用模板。对于Jetpack Compose项目,请选择带有“Empty Compose Activity”的选项。这将为你设置好所有必要的Compose依赖项。
    • 如果没有找到此选项,确保你使用的是最新版本的Android Studio,并且已经安装了Jetpack Compose的支持库。
  4. 配置项目信息

    • 输入你的项目名称、包名和保存位置。
    • 选择最低SDK版本(API level)。为了充分利用Jetpack Compose的功能,建议选择一个较高的API级别,如API 21或更高。
  5. 点击“Finish”

    • 点击“Finish”按钮后,Android Studio将会根据所选模板自动生成项目结构,并自动添加必要的依赖项到build.gradle文件中。

添加Jetpack Compose依赖(如果需要)

如果你是从一个非Compose项目转换而来,或者上述步骤未能正确添加Compose依赖,你需要手动编辑build.gradle文件。在项目的build.gradle文件中,确保包含以下内容:

plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'
}android {...buildFeatures {compose true // 启用 Jetpack Compose}composeOptions {kotlinCompilerExtensionVersion '1.4.0' // 使用最新的版本号}...
}dependencies {implementation "androidx.compose.ui:ui:1.4.0" // 或者更新到最新版本implementation "androidx.compose.material:material:1.4.0"implementation "androidx.compose.ui:ui-tooling-preview:1.4.0"debugImplementation "androidx.compose.ui:ui-tooling:1.4.0"...
}

运行你的第一个Jetpack Compose应用

  1. 同步项目

    • 修改完build.gradle文件后,记得点击工具栏上的“Sync Now”来同步项目更改。
  2. 打开主活动文件

    • 通常情况下,主活动文件是MainActivity.kt。在这个文件中,你会看到一些默认生成的代码,用于展示一个简单的文本组件。
  3. 运行应用程序

    • 连接一个物理设备或者启动一个虚拟设备(AVD),然后点击工具栏上的绿色运行按钮(Run)来编译并部署你的应用。
  4. 查看结果

    • 应用程序应该成功构建并在选定的设备上运行,显示由Jetpack Compose渲染的UI。

通过以上步骤,你应该能够成功创建并运行一个基于Jetpack Compose的Android项目。随着你对Compose越来越熟悉,你可以开始探索更多复杂的UI组件和功能。如果你遇到任何问题,可以随时查阅官方文档或寻求社区的帮助。

3.我的Android Studio找不到Empty Compose Activity,怎么办?

如果你在创建新项目时没有看到“Empty Compose Activity”模板,这可能是由于以下几个原因造成的。我们可以逐一排查并解决问题:

1. 检查Android Studio版本

确保你使用的是最新版本的Android Studio。Jetpack Compose的支持是在较新的版本中引入的,因此旧版本可能不包含这个模板。你可以通过以下步骤更新你的Android Studio:

  • 打开Android Studio。
  • 转到Help > Check for Updates(在macOS上是Android Studio > Check for Updates)。
  • 如果有可用更新,按照提示进行安装。

2. 确认插件已安装

确保你已经安装了必要的Jetpack Compose插件和支持库。有时候,即使Android Studio本身是最新的,也可能需要单独安装或更新这些插件:

  • 打开File > Settings(在macOS上是Android Studio > Preferences)。
  • 导航到Plugins,搜索Jetpack ComposeCompose相关插件,并确保它们已被安装且为最新版本。
  • 如果未安装,请点击安装按钮,然后重启IDE以应用更改。

3. 手动添加Jetpack Compose支持

如果上述方法仍然无法解决问题,你可以选择一个普通的空活动模板(如“Empty Activity”),然后手动将Jetpack Compose集成到项目中。以下是具体步骤:

创建普通项目
  • 使用“Empty Activity”或其他类似模板创建一个新的Android项目。
修改build.gradle文件

编辑项目的顶级build.gradle文件和模块级build.gradle文件,以添加必要的依赖项和配置。例如,在模块级build.gradle文件中添加如下内容:

plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'
}android {...buildFeatures {compose true // 启用 Jetpack Compose}composeOptions {kotlinCompilerExtensionVersion '1.4.0' // 使用最新的版本号}...
}dependencies {implementation "androidx.compose.ui:ui:1.4.0" // 或者更新到最新版本implementation "androidx.compose.material:material:1.4.0"implementation "androidx.compose.ui:ui-tooling-preview:1.4.0"debugImplementation "androidx.compose.ui:ui-tooling:1.4.0"...
}
将XML布局转换为Compose函数

打开默认生成的activity_main.xml文件,将其删除或重命名为备份。然后,在MainActivity.kt中替换现有的代码,使其成为一个简单的Compose应用程序。例如:

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.spclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MyApp {Greeting("Hello, World!")}}}
}@Composable
fun MyApp(content: @Composable () -> Unit) {MaterialTheme {Surface {content()}}
}@Composable
fun Greeting(name: String) {Text(text = name, fontSize = 24.sp)
}@Preview(showBackground = true)
@Composable
fun DefaultPreview() {MyApp {Greeting("Hello, World!")}
}

4. 重启并清理项目

有时候,IDE缓存可能导致一些问题。尝试执行以下操作来清除缓存并重启项目:

  • 在菜单栏中选择File > Invalidate Caches / Restart...
  • 点击Invalidate and Restart按钮。

完成以上步骤后,你应该能够成功地将Jetpack Compose集成到你的项目中。尽管缺少特定的模板,但通过手动配置,你仍然可以充分利用Jetpack Compose的功能。如果你遇到任何问题或不确定的地方,不要犹豫向社区寻求帮助或者查阅官方文档。

4.我纠正你一下,我用的是Android Studio Giraffe | 2022.3.1 Patch 1,我新建工程,选Empty Activity,默认就是Compose

感谢你的澄清。在Android Studio Giraffe | 2022.3.1 Patch 1版本中,选择“Empty Activity”模板时,默认情况下确实会启用Jetpack Compose支持。这意味着你不需要专门寻找“Empty Compose Activity”模板,因为“Empty Activity”已经集成了Compose。

既然如此,如果你选择了“Empty Activity”并且默认就是使用Jetpack Compose,那么你应该已经有了一个配置好的Compose项目。接下来,你可以直接开始探索和编写Jetpack Compose代码了。

确认项目配置

为了确保一切设置正确,你可以检查以下几个方面:

  1. build.gradle 文件

    • 检查模块级的build.gradle文件,确认已包含必要的Jetpack Compose依赖项。例如:

      plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'
      }android {...buildFeatures {compose true // 启用 Jetpack Compose}composeOptions {kotlinCompilerExtensionVersion '1.4.0' // 使用最新的版本号}...
      }dependencies {implementation "androidx.compose.ui:ui:1.4.0" // 或者更新到最新版本implementation "androidx.compose.material:material:1.4.0"implementation "androidx.compose.ui:ui-tooling-preview:1.4.0"debugImplementation "androidx.compose.ui:ui-tooling:1.4.0"...
      }
      
  2. 主活动文件(MainActivity.kt

    • 打开MainActivity.kt文件,确认它使用了setContent方法来设置Compose内容,并且包含了至少一个简单的Composable函数。例如:

      import android.os.Bundle
      import androidx.activity.ComponentActivity
      import androidx.activity.compose.setContent
      import androidx.compose.material3.MaterialTheme
      import androidx.compose.material3.Surface
      import androidx.compose.material3.Text
      import androidx.compose.runtime.Composable
      import androidx.compose.ui.tooling.preview.Preview
      import androidx.compose.ui.unit.spclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MyApp {Greeting("Hello, World!")}}}
      }@Composable
      fun MyApp(content: @Composable () -> Unit) {MaterialTheme {Surface {content()}}
      }@Composable
      fun Greeting(name: String) {Text(text = name, fontSize = 24.sp)
      }@Preview(showBackground = true)
      @Composable
      fun DefaultPreview() {MyApp {Greeting("Hello, World!")}
      }
      
  3. 运行应用程序

    • 连接物理设备或启动AVD(Android Virtual Device),然后点击工具栏上的绿色运行按钮(Run)来编译并部署你的应用。
    • 应用程序应该成功构建并在选定的设备上运行,显示由Jetpack Compose渲染的UI。

探索和学习

既然你已经有了一个预配置好的Jetpack Compose项目,现在是时候开始深入学习和探索了。你可以尝试修改现有的Composable函数、添加新的组件、处理状态变化等。此外,官方文档和教程是极好的资源,可以帮助你进一步理解Jetpack Compose的各种特性和最佳实践。

如果你遇到任何问题或有疑问,随时可以提问!祝你在Jetpack Compose的学习之旅中取得成功。

5.怎么运行这个应用?

要运行你创建的Jetpack Compose应用,你需要确保已经正确设置了开发环境,并且遵循了正确的步骤来编译和部署应用到目标设备上。以下是详细的步骤指南:

1. 确认开发环境

确保你的Android Studio是最新的,并且已经安装了必要的插件和支持库。如果还没有完成这些设置,请参考之前的指导进行配置。

2. 连接目标设备

你可以选择使用虚拟设备(AVD)或物理设备来运行应用程序:

  • 使用虚拟设备

    • 打开AVD Manager(可以通过点击工具栏中的小机器人图标或通过Tools > AVD Manager访问)。
    • 创建一个新的虚拟设备或者选择一个已有的设备配置。
    • 启动所选的虚拟设备。
  • 使用物理设备

    • 使用USB线将Android设备连接到电脑。
    • 确保开发者选项和USB调试已经在设备上启用。可以在设备的“设置”>“关于手机”中多次点击版本号以开启开发者选项,然后在“设置”>“系统”>“开发者选项”中找到并启用USB调试。

3. 选择目标设备

  • 在Android Studio的工具栏中,你会看到一个下拉菜单,显示可用的目标设备列表。
  • 如果你启动了虚拟设备或连接了物理设备,它应该出现在这个列表中。
  • 选择你要运行应用的目标设备。

4. 构建并运行应用

  • 点击工具栏上的绿色运行按钮(Run),或者通过Run > Run 'app'菜单项来启动应用。
  • Android Studio会自动执行以下操作:
    • 编译项目代码。
    • 构建APK文件。
    • 将APK安装到选定的目标设备上。
    • 启动应用程序。

5. 查看结果

一旦应用成功部署到目标设备上,你应该能够看到由Jetpack Compose渲染的UI。例如,如果你按照之前提供的示例代码创建了一个简单的“Hello, World!”应用,那么屏幕上应该会显示居中的文本。

6. 调试与日志

如果遇到问题,可以利用以下工具进行排查:

  • Logcat:打开Logcat窗口(View > Tool Windows > Logcat),查看日志输出,寻找可能的错误信息。
  • Debug模式:通过点击工具栏上的调试按钮(带有虫子图标的按钮)来启动应用,进入调试模式,这可以帮助你逐步检查代码执行情况。
  • 布局检查器:使用Layout Inspector工具(View > Tool Windows > Layout Inspector)来分析运行时的UI布局,了解各个组件的位置和属性。

示例步骤

假设你已经有一个预配置好的Jetpack Compose项目,以下是具体的操作步骤:

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MyApp {Greeting("Hello, World!")}}}
}@Composable
fun MyApp(content: @Composable () -> Unit) {MaterialTheme {Surface(modifier = Modifier.fillMaxSize()) {content()}}
}@Composable
fun Greeting(name: String) {Box(modifier = Modifier.fillMaxSize().wrapContentSize(Alignment.Center) // 居中对齐内容) {Text(text = name, fontSize = 24.sp)}
}@Preview(showBackground = true)
@Composable
fun DefaultPreview() {MyApp {Greeting("Hello, World!")}
}
  1. 确认所有依赖项和配置都正确无误
  2. 选择目标设备(虚拟机或物理设备)。
  3. 点击运行按钮,等待应用编译、构建和部署。
  4. 观察设备屏幕,确认应用是否如预期般运行。

如果你遇到了任何特定的问题或错误消息,不要犹豫向我提问!我可以帮助你进一步诊断和解决问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-创建一个结合CompletableFuture和自定义功能的工具类

1.重试机制:当异步任务失败时自动重试。 2.超时重试:在指定时间内未完成的任务进行重试。 3.批量处理:将多个任务批量执行并收集结果。 4.日志记录:为每个异步任务添加日志记录,便于调试和监控。 5.自定义线程池:允许用户传入自定义的线程池配置。 import java.util…

HTML——66.单选框

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>单选框</title></head><body><!--input元素的type属性&#xff1a;(必须要有)--> <!--单选框:&#xff08;如所住省会&#xff0c;性别选择&…

python -【es】基本使用

一. 前言 在Python中使用Elasticsearch&#xff08;ES&#xff09;通常涉及安装Elasticsearch的Python客户端库&#xff0c;然后通过该库与Elasticsearch集群进行交互。 二. 基本使用 1. 安装Elasticsearch Python客户端库 首先&#xff0c;你需要安装elasticsearch库。你可…

GitHub Actions 自动构建和部署容器到 Azure Web App

在当今快速发展的软件开发世界中,持续集成和持续部署(CI/CD)已成为提高效率和保证质量的关键实践。本文将详细介绍如何使用 GitHub Actions 来自动构建 Docker 容器并将其部署到 Azure Web App。这个自动化流程不仅能节省大量时间,还能显著减少人为错误,让开发团队更专注于…

自行下载foremos命令

文章目录 问题描述其他小伙伴的成功解决方案&#xff0c;但对我不适用解决思路失败告终 最终解决成功解决思路解决步骤 问题描述 在kali系统终端中输入foremost&#xff0c;显示无此命令 其他小伙伴的成功解决方案&#xff0c;但对我不适用 解决思路 正常来说使用命令 apt-g…

LED背光驱动芯片RT9293应用电路

一&#xff09;简介&#xff1a; RT9293 是一款高频、异步的 Boost 升压型 LED 定电流驱动控制器&#xff0c;其工作原理如下&#xff1a; 1&#xff09;基本电路结构及原理 RT9293的主要功能为上图的Q1. Boost 电路核心原理&#xff1a;基于电感和电容的特性实现升压功能。当…

Android中创建ViewModel的几种方法

文章目录 1. 使用 `ViewModelProvider`1.1 在 `Activity` 中创建 `ViewModel`1.2 在 `Fragment` 中创建 `ViewModel`2. 使用 `ViewModelFactory`2.1 创建 `ViewModel` 和 `ViewModelFactory`2.2 在 `Activity` 或 `Fragment` 中使用 `ViewModelFactory`3. 使用 `by viewModels(…

AI大模型语音识别转文字

提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字&#xff0c;也可从特定视频中提取对应音频进行转录成文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…

CG顶会论文阅读|《科技论文写作》硕士课程报告

文章目录 一、基本信息1.1 论文基本信息1.2 课程基本信息1.3 博文基本信息 二、论文评述&#xff08;中英双语&#xff09;2.1 研究问题&#xff08;Research Problem&#xff09;2.2 创新点&#xff08;Innovation/Contribution&#xff09;2.3 优点&#xff08;Why this pape…

JVM实战—9.线上FGC的几种案例

大纲 1.如何优化每秒十万QPS的社交APP的JVM性能(增加S区大小 优化内存碎片) 2.如何对垂直电商APP后台系统的FGC进行深度优化(定制JVM参数模版) 3.不合理设置JVM参数可能导致频繁FGC(优化反射的软引用被每次YGC回收) 4.线上系统每天数十次FGC导致频繁卡顿的优化(大对象问题…

FreshTomato 路由器固件常见配置以及踩坑记录

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 在上一篇文章《网件 R6400 梅林固件恢复官方固件后刷入 FreshTomato》中&#xff0c;我将网件 R6400 刷入了 FreshTomato 固件&#xff0c;目前已经使用了大半个月了&#xff0c;稳定性比起 380.70_0-X7.9…

嵌入式驱动开发详解8(阻塞/非阻塞/异步通信)

文章目录 前言阻塞非阻塞异步通知后续 前言 首先来回顾一下“中断”&#xff0c;中断是处理器提供的一种异步机制&#xff0c;我们配置好中断以后就 可以让处理器去处理其他的事情了&#xff0c;当中断发生以后会触发我们事先设置好的中断服务函数&#xff0c; 在中断服务函数…

Jmeter进阶篇(31)解决java.net.BindException: Address already in use: connect报错

📚前言 近期雪雪妹妹在使用Jmeter执行压测的时候,发现了一个非常让她头疼的问题,她使用20并发跑,正确率可以达到100%,但是一旦使用200并发,就会出现大量的报错,报错内容如下: java.net.BindException: Address already in use: connectat java.net.DualStackPlainSo…

leveldb的DBSequence从哪里来,到哪里去?

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) leveldb数据库的DBSequence从哪里来&#xff0c;到哪里去&#xff1f; 大概的情形是&#xff0c;leveldb的记录初始DBSequence为0&#xff0c;随着记录的增加&#xff0c;记录sequence不断随着增加&#xff0c;并持久化…

每日一学——日志管理工具(ELK Stack)

5.1 ELK Stack 5.1.1 Elasticsearch索引机制 嘿&#xff0c;小伙伴们&#xff01;今天我们要聊聊ELK Stack——一套由Elasticsearch、Logstash和Kibana组成的强大日志管理工具集。通过这套工具&#xff0c;我们可以轻松地收集、存储、搜索和可视化日志数据。首先&#xff0c;…

PyTorch 自动混合精度AMP Grad Scaler 源码解析:_unscale_grads_ 与 unscale_ 函数

PyTorch AMP Grad Scaler 源码解析&#xff1a;_unscale_grads_ 与 unscale_ 函数 引言 本文详细解析 PyTorch 自动混合精度&#xff08;AMP&#xff09;模块中 grad_scaler.py 文件的两个关键函数&#xff1a;_unscale_grads_ 和 unscale_。这些函数在梯度缩放与反缩放过程中…

docker内外如何实现ROS通信

写在前面 在一台电脑上装有docker&#xff0c;docker内外均装有ROS系统&#xff0c;现在想要实现docker内外的ROS通信&#xff0c;怎么办呢&#xff1f; 首先&#xff0c;因为是同一台电脑的docker内外&#xff0c;所以IP本身是互通的&#xff0c;不需要在/etc/hosts中添加IP…

双指针与滑动窗口

双指针 相向双指针 两数之和 题意是找到不同两个数使得它们相加和为target&#xff0c;数组有序 利用数组有序的性质&#xff0c;判断指针前后的区间的性质 例如&#xff1a;2 3 4 6 8, target 9 2 8 10 > 9, 因为非递减序列&#xff0c;2之后的每个数都会大等于2&…

unity开发之shader 管道介质流动特效

效果 shader graph 如果出现下面的效果&#xff0c;那是因为你模型的问题&#xff0c;建模做贴图的时候没有设置好UV映射&#xff0c;只需重新设置下映射即可

python +tkinter绘制彩虹和云朵

python tkinter绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…