小编Arp*_*kla的帖子

如何在 Jetpack Compose 中实现平移+缩放动画?

我有一个屏幕,屏幕的一角有一个图像,我想将其动画到屏幕的中心。类似从

Icon(
    painter = //,
    contentDescription = //,
    modifier = Modifier.size(36.dp)
)
Run Code Online (Sandbox Code Playgroud)

Icon(
    painter = //,
    contentDescription = //,
    modifier = Modifier.fillMaxSize()
)
Run Code Online (Sandbox Code Playgroud)

第一个位于屏幕左上角,第二个位于屏幕中央。如何在两种状态之间设置动画?

android kotlin android-jetpack-compose jetpack-compose-animation

3
推荐指数
2
解决办法
6433
查看次数

为什么 Kotlin 在 sumOf 函数 lambda 中默认不将数字视为“Int”?

在下面的代码中:

val sum = listOf(1, 2, 3).sumOf { if (it % 2 == 0) 1 else 0 }
Run Code Online (Sandbox Code Playgroud)

Kotlin 给出以下错误:

Kotlin: Overload resolution ambiguity: 
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Int): Int defined in kotlin.collections
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Long): Long defined in kotlin.collections
Run Code Online (Sandbox Code Playgroud)

操场

如果我明确使用toInt(),错误就会消失,但我会收到冗余调用的警告

Kotlin: Overload resolution ambiguity: 
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Int): Int defined in kotlin.collections
public inline fun <T> Iterable<TypeVariable(T)>.sumOf(selector: (TypeVariable(T)) -> Long): Long defined in kotlin.collections …
Run Code Online (Sandbox Code Playgroud)

kotlin

3
推荐指数
1
解决办法
223
查看次数

如何在android分页3库中标记数据集的结尾?

我正在尝试在我的应用中使用 Android 新的 Paging 3 库。我正在使用返回对象列表的 Retrofit 从后端 API 获取数据。我需要询问如何在 API 返回空列表时通知 Pager 停止加载更多数据。

提前致谢...

android kotlin android-jetpack android-paging android-paging-library

2
推荐指数
1
解决办法
542
查看次数

如何设置条件属性?

在 Kotlin 和使用 Jetpack Compose 中,我有很多代码,例如:

Box(
    modifier = Modifier
        .fillMaxHeight()
        .requiredWidth(expandedSize)
        .align(Alignment.Center)
)
Run Code Online (Sandbox Code Playgroud)

但很多时候我想根据条件设置一个属性:

if(isFlag){
    Box(
        modifier = Modifier
            .fillMaxHeight()
            .requiredWidth(expandedSizeA)
            .align(Alignment.Center)
    )
} else {
    Box(
        modifier = Modifier
            .fillMaxHeight()
            .requiredWidth(expandedSizeB)
            .align(Alignment.Center)
    )
}
Run Code Online (Sandbox Code Playgroud)

或类似或requiredWidth()的条件padding()

if(isFlag){
    Box(
        modifier = Modifier
            .fillMaxHeight()
            .requiredWidth(expandedSizeA)
            .align(Alignment.Center)
    )
} else {
    Box(
        modifier = Modifier
            .fillMaxHeight()
            .padding(80.dp, 30.dp, 80.dp, 0.dp)
            .align(Alignment.Center)
    )
}
Run Code Online (Sandbox Code Playgroud)

我敢打赌有一种优雅的 Kotlin 方法可以做到这一点?

kotlin android-jetpack-compose

2
推荐指数
1
解决办法
2288
查看次数

如何从流程中收集项目直到满足特定条件?

我有一个Flow<List<Int?>>,我想收集这个流,但直到我得到一个空的 Int。然后流程应该被取消。例如,

val flow = flowOf(
    listOf(1, 2),
    listOf(3, null),
    listOf(4)
)
flow.collectUntilNull {
    println(it)
}
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

[1, 2]
[3, null]
Run Code Online (Sandbox Code Playgroud)

我知道有一个函数Flow.takeWhile,但它不会发出谓词返回 false 的值。就我而言,我也想要那个。

[1, 2]
[3, null]
Run Code Online (Sandbox Code Playgroud)

由于collectWhile是内部的,我无法使用此代码。虽然我想我可以复制粘贴该collectWhile实现到我的代码中。但还有其他方法可以做到这一点吗?

kotlin kotlin-coroutines kotlin-flow

2
推荐指数
1
解决办法
6018
查看次数

向前导航时如何将底部工作表保留在后退堆栈中?

我在我的项目中使用伴奏底部表目的地。设置与文档中显示的完全相同。

@Composable
fun MyApp() {
    val bottomSheetNavigator = rememberBottomSheetNavigator()
    val navController = rememberNavController(bottomSheetNavigator)
    ModalBottomSheetLayout(bottomSheetNavigator) {
        NavHost(navController, Destinations.Home) {
           composable(route = "home") {
               HomeScreen(
                   openBottomSheet = { navController.navigate("sheet")  }
               )
           }
           bottomSheet(route = "sheet") {
               MyBottonSheet(
                   navigateToSomeRoute = { navController.navigate("some_route") }
               )
           }
           composable(route = "some_route") {
               SomeComposable(
                   onBackPress = { navController.navigateUp() }
               )
           }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MyBottomSheet这里我有一个打开屏幕的按钮SomeComposable。但是当我从那里向上导航时,我到达了HomeScreen即当我导航离开底部工作表时,底部工作表从后堆栈中弹出。如何将底部工作表保留在后堆栈中,以便当我按“后退”键时SomeComposable返回到打开状态MyBottonSheet(位于 顶部HomeScreen)的上一个状态?

android kotlin android-jetpack-navigation android-jetpack-compose jetpack-compose-accompanist

2
推荐指数
1
解决办法
1360
查看次数