首页 > 其他分享 >Android开发笔记[8]-基于Compose布局的开屏页

Android开发笔记[8]-基于Compose布局的开屏页

时间:2024-01-30 20:11:39浏览次数:38  
标签:Compose androidx 开屏 compose ui import Android Modifier

摘要

基于Compose布局的开屏页,显示进度条;自动跳转到其他页面.

关键信息

  • Android Studio: Electric Eel | 2022.1.1 Patch 2
  • Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-7.5-bin.zip
  • jvmTarget = '1.8'
  • minSdk 21
  • targetSdk 33
  • compileSdk 33
  • 开发语言:Kotlin,Java
  • ndkVersion = '21.1.6352462'
  • kotlin版本:1.7.0

原理简介

Compose页面布局方式

[https://juejin.cn/post/7179112707302359097]
[https://juejin.cn/post/7044076377657573406]
布局系统的 Jetpack Compose 实现有两个主要目标:一是实现高性能,二是让开发者能够轻松编写自定义布局。在 Compose 中,通过避免多次测量布局子级可实现高性能。如果需要进行多次测量,Compose 具有一个特殊系统,即固有特性测量。
布局主要包括:布局基础知识、Material组件和布局、自定义布局、Compose中使用ConstraintLayout。
页面示例:

package cn.qsbye.grape_yolov5_detect_android

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import cn.qsbye.grape_yolov5_detect_android.ui.theme.Grapeyolov5detectandroidTheme

class BootActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Grapeyolov5detectandroidTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    Greeting("Android")
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!")
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    Grapeyolov5detectandroidTheme {
        Greeting("Android")
    }
}

实现

关键代码

  1. 新建Compose布局的Activity:
    Android Studio中右键工程,新建Compose的布局的页面BootActivity;

  2. 关键代码
    BootActivity.kt

package cn.qsbye.grape_yolov5_detect_android
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.LinearProgressIndicator
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import cn.qsbye.grape_yolov5_detect_android.ui.theme.Grapeyolov5detectandroidTheme
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

class BootActivity : ComponentActivity() {
    private val SPLASH_TIME: Long = 1500 // 延迟时间,单位为毫秒
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Grapeyolov5detectandroidTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    // 绘制Compose界面
                    BootScreen()
                }
            }
        }
        // 使用协程实现延迟切换到主界面
        CoroutineScope(Dispatchers.Main).launch {
            delay(SPLASH_TIME)
            navigateToMainActivity()
        }
    }
    private fun navigateToMainActivity() {
        // 切换到主界面
        val intent = Intent(this, ResultActivity::class.java)
        startActivity(intent)
        finish()
    }
}
@Composable
fun BootScreen() {
    var progress by remember { mutableStateOf(0) } // 用于控制进度条进度的状态
    // 设置背景
    Box(
        modifier = Modifier
            .fillMaxSize()
                // 黄绿色:#DBDF74
            .background(Color(0xFFDBDF74)) // 使用带有 alpha 通道的十六进制颜色值
    ) {
        // 垂直线性布局
        Column(
            modifier = Modifier.fillMaxSize(),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            // 图片
            Image(
                painter = painterResource(id = R.drawable.grape_bg),
                contentDescription = "logo",
                modifier = Modifier.size(400.dp, 400.dp)
                                    .padding(start = 16.dp, end = 16.dp), // 添加左右padding

                // contentScale = ContentScale.FillWidth
            )
            // 欢迎文本
            Text(
                text = "正在加载「数葡萄」...",
                color = Color.White,
                fontSize = 24.sp,
                textAlign = TextAlign.Center,
                style = MaterialTheme.typography.h6
            )
            // 进度条
            LinearProgressIndicator(
                progress = progress / 100f, // 进度条的进度,需要转换为0f到1f之间的浮点数
                modifier = Modifier
                    .padding(top = 50.dp)
                    .width(200.dp)
            )

            // 进度条动画
            LaunchedEffect(key1 = true) {
                while (progress < 100) {
                    delay(13)
                    progress += 1
                }
            }// end LaunchedEffect

        }
    }
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    Grapeyolov5detectandroidTheme {
        BootScreen()
    }
}

效果

开屏画面

标签:Compose,androidx,开屏,compose,ui,import,Android,Modifier
From: https://www.cnblogs.com/qsbye/p/17997866

相关文章

  • Android原生定位
    使用LocationManager和LocationListener结合进行简单定位功能1.创建LocationManagerLocationManagerlocationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);2.创建LocationListenerprivatefinalLocationListenerlocationListener=newLocati......
  • AndroidStudio-创建Kotlin匿名内部类时自动补全
    AndroidStudio-创建Kotlin匿名内部类时自动补全用Kotlin写代码,当要创建匿名类实例时,总是要自己手敲出来,不像Java一样,输入new就会有代码提示出来,去网上搜索,大部分都是AndroidStudio按住ctrl+空格键,或者ctrl+alt+空格会出现代码提示,我试了,嗯...好像啥反应也没有,然后发现每次按,输入......
  • Xamarin.Android中使用TaskCompletionSource创建阻塞式的对话框
    代码如下usingAndroid.OS;usingAndroid.Views;usingAndroid.Util;usingActivity=Android.App.Activity;namespaceKangHuiXinCai_FangDai_AndroidScanner{publicclassDialog_SettingPassword:Dialog{TaskCompletionSource<DialogResu......
  • Android Studio如何解决Connect time out问题
    Hello各位同学们好,我是咕噜铁蛋,使用AndroidStudio是我们日常开发工作中不可缺少的工具。然而,在使用AndroidStudio进行开发时,有些时候会遇到连接超时(Connecttimeout)的问题,这会影响我们的开发进程,甚至可能导致应用无法正常运行。那么,如何解决这个问题呢?今天就由铁蛋来为大家介绍......
  • docker-compose命令
    docker-compose命令1、基础命令docker-compose命令--help#获得一个命令的帮助docker-composeversion#查看docker-compose版本信息2、构建、卸载docker-composeup-dC#构建启动某个容器docker-composed......
  • docker-compose.yaml相关
    docker-compose.yaml相关Compose和Docker兼容性:Compose文件格式有3个版本,分别为1,2.x和3.x目前主流的为3.x其支持docker1.13.0及其以上的版本常用参数:version#指定compose文件的版本services#定义所有的service信息,......
  • docker-compose部署简单案例
    Dockerfile#设置基础镜像FROMpython:3.7#设置环境变量ENVPYTHONUNBUFFERED=1ENVPATH/usr/local/bin:$PATH#设置工作目录WORKDIR/home/lab#复制项目文件到容器中COPY./home/lab/#COPYrequirements.txt/home/lab#安装依赖包(先更新pip,换源,再安装包)......
  • Docker-compose
    DOCKER-COMPOSE简介DockerCompose是一个用于定义和运行多容器Docker应用程序的工具。它允许用户使用YAML文件来定义应用程序的配置,包括容器的数量、容器之间的依赖关系、环境变量、端口映射以及其他设置。然后,用户可以使用docker-compose命令来启动和管理这些容器。使......
  • docker部署(使用docker-compose)手把手教程
    docker部署(使用docker-compose)手把手教程:https://blog.csdn.net/qq_38377190/article/details/125504426?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170650340916800186593495%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1706......
  • Windows系统开屏无法弹出密码框的问题
    已下教程可能会有效第一步Win+R打开运行输入msconfig第二部更改为正常启动......