我知道我可以使用AnimatedVisibilityComposable 函数并实现可见性动画的滑入动画,但我想要实现的是当一个布局处于进入动画而另一个处于退出动画时,类似于下图。
注意:我知道我应该为不同的屏幕使用导航组合,并且目的地之间的动画仍在开发中,但我想在屏幕的一部分内容上实现这一点,类似于 CrossFade 动画。
不知何故,构建崩溃了,并出现了与导航组件相关的奇怪错误,尽管它以前可以工作,但错误出在生成的类中,就我而言 NativeLanguageSelectionFragmentDirections
这是错误
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (10, 16): Class 'GoToSelectLearningLangAction' is not abstract and does not implement abstract member public abstract val actionId: Int defined in androidx.navigation.NavDirections
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (13, 12): 'getActionId' overrides nothing
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (15, 12): 'getArguments' overrides nothing
Run Code Online (Sandbox Code Playgroud)
这是导航图的代码
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (10, 16): Class 'GoToSelectLearningLangAction' is not abstract and does not implement abstract member public abstract val actionId: Int defined in androidx.navigation.NavDirections
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (13, 12): 'getActionId' overrides nothing
e: C:\Users\David\StudioProjects\android\app\build\generated\source\navigation-args\debug\com\linguistic\linguistic\framework\presentation\loginscreens\ui\main\NativeLanguageSelectionFragmentDirections.kt: (15, 12): 'getArguments' overrides nothing
Run Code Online (Sandbox Code Playgroud)
我在用
"androidx.navigation:navigation-fragment-ktx:2.3.5" …Run Code Online (Sandbox Code Playgroud) 我正在使用 Android 撰写和视图模型,并且我有一个 ViewModel,其范围为单个 Composable 函数,该函数是一个底部工作表视图,它使用BottomSheetScaffold进行膨胀,并且我使用viewModel将 ViewModel 注入 Composable 函数内,但我有一个问题viewModel当我再次打开底部工作表时,函数返回之前创建的相同 viewModel 实例。
换句话说,如何将 ViewModel 的范围限制为与 NavHost 和 backStack 无关的 Dialog Composable 函数
@Composable
fun ComposableExample(
) {
val viewModel: ExampleViewModel= viewModel() // createdOnlyOnce and always returns old instance
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 android compose 将显示的彩色图像转换为黑白图像。
在视图系统中,我可以通过添加这样的过滤器将图像从彩色变为黑白
imageView.colorFilter = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f)})
Run Code Online (Sandbox Code Playgroud)
如本答案所示。
在 Android Compose 中,Image 可组合函数已经采用了颜色过滤器,但我在 compose 包中找不到等效的ColorMatrixColorFilter。
这是我想转换为灰度的图像代码
Image(
asset = vectorResource(id = R.drawable.xxx),
modifier = Modifier.clip(RectangleShape).size(36.dp, 26.dp),
alpha = alpha,
alignment = Alignment.Center,
contentScale = ContentScale.Fit
)
Run Code Online (Sandbox Code Playgroud) 在android compose中,有一个Scaffold可组合的函数来创建一个包含底部导航栏的布局,还有另一个名为BottomSheetScaffold创建一个包含底部导航栏的布局的函数。
我的问题是如何在相同的布局中同时实现底部工作表和底部导航栏?
我尝试使用 BottomSheetScaffold 并在布局中添加底部导航栏,但是当我在同一列中使用 NavHost 时失败了。
案例的简化代码:
BottomSheetScaffold(
{ BottomSheetComposable },
topBar = {
TopAppBar()
},
sheetPeekHeight = 0.dp
) {
Column() {
NavHost(
navController,
startDestination = "route"
) {
Composable("route") {}
}
Box(
modifier = Modifier
.fillMaxWidth()
.height(60.dp)
) {
BottomNavigationBar()
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图连续显示两个文本消息,但是当第一个文本的大小很大时,第二个视图被推出屏幕,如下所示:
代码:
Row(modifier = Modifier.fillMaxWidth()) {
Text(
text = "safasfasdfsasdssdsaasdsadsdsaasdsasdsasdasddassdsssdasdadsasdasdsd",
modifier = Modifier
.padding(top = 12.dp, bottom = 12.dp, end = 12.dp, start = 10.dp)
.background(Color.Gray)
)
Text(
text = "12:00 am",
style = messageTimeTextStyle,
modifier = Modifier
.padding(horizontal = 16.dp),
maxLines = 1
)
}
Run Code Online (Sandbox Code Playgroud)
我无法预览下面代码中显示的可组合函数
\n@Preview\n@Composable\nfun StartingConversationInstructions() {\n Column {\n Text(stringResource(id = R.string.remember))\n\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但当我尝试预览该功能时出现此错误
\njava.lang.NoSuchMethodError: \'androidx.compose.runtime.SlotTable\nandroidx.compose.runtime.Composer.getSlotTable()\' \xc2\xa0\xc2\xa0at \nandroidx.ui.tooling.InspectableKt.Inspectable(Inspectable.kt:63) \xc2\xa0\xc2\xa0at \nandroidx.ui.tooling.preview.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:357) \xc2\xa0\xc2\xa0at\n androidx.ui.tooling.preview.ComposeViewAdapter$WrapPreview$1.invoke(ComposeViewAdapter.kt:-1) \xc2\xa0\xc2\xa0at\n androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) \xc2\xa0\xc2\xa0at \nandroidx.ui.tooling.preview.ComposeViewAdapter.WrapPreview(ComposeViewAdapter.kt:356) \xc2\xa0\xc2\xa0at \nandroidx.ui.tooling.preview.ComposeViewAdapter.access$WrapPreview(ComposeViewAdapter.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.ui.tooling.preview.ComposeViewAdapter$init$1.invoke(ComposeViewAdapter.kt:397) \xc2\xa0\xc2\xa0at \nandroidx.ui.tooling.preview.ComposeViewAdapter$init$1.invoke(ComposeViewAdapter.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.AmbientsKt.ProvideCommonAmbients(Ambients.kt:274) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.AndroidAmbientsKt$ProvideAndroidAmbients$3.invoke(AndroidAmbients.kt:176) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.AndroidAmbientsKt$ProvideAndroidAmbients$3.invoke(AndroidAmbients.kt:-1) \xc2\xa0\xc2\xa0at androidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.AndroidAmbientsKt.ProvideAndroidAmbients(AndroidAmbients.kt:168) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.WrappedComposition$setContent$1$1$2.invoke(Wrapper.kt:251) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.WrappedComposition$setContent$1$1$2.invoke(Wrapper.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.AmbientKt.Providers(Ambient.kt:188) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.kt:250) \xc2\xa0\xc2\xa0at \nandroidx.compose.ui.platform.WrappedComposition$setContent$1$1.invoke(Wrapper.kt:-1) \xc2\xa0\xc2\xa0at \n.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:146) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.internal.ComposableLambda.invoke(ComposableLambda.kt:-1) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:2904) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.Composer.composeInitial(Composer.kt:2070) \xc2\xa0\xc2\xa0at \nandroidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:353) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 camerax 拍摄多张照片,但只拍摄了第一张照片,代码和日志输出将显示我的意思。
这是代码:
Log.d(TAG, "------------------ taking new picture1");
mImageCapture.takePicture(new ImageCapture.OnImageCapturedListener() {
@Override
public void onCaptureSuccess(ImageProxy imageProxy, int rotationDegrees) {
Image image = imageProxy.getImage();
Log.d(TAG, "taking new picture onCapture Success 1 called");
}
@Override
public void onError(ImageCapture.UseCaseError useCaseError, String message, @Nullable Throwable cause) {
super.onError(useCaseError, message, cause);
Log.d(TAG, "--------- error in image capture 1" + message);
}
});
Log.d(TAG, "------------------ taking new picture 2");
mImageCapture.takePicture(new ImageCapture.OnImageCapturedListener() {
@Override
public void onCaptureSuccess(ImageProxy imageProxy, int rotationDegrees) {
Image image = imageProxy.getImage();
Log.d(TAG, …Run Code Online (Sandbox Code Playgroud)