【问题标题】:Stack images one over the other. Z-Axis in android一张一张地堆叠图像。 android中的Z轴
【发布时间】:2021-06-07 16:26:06
【问题描述】:

所以我对 Android 很陌生,但我已经在 xCode 中创建了想要的效果。

我想弄清楚的是什么相当于 Android 的 xCode 中的 ZStack()。

我正在尝试在需要时将图像叠加到另一个图像上。

在 xCode 中使用 ZStack 将允许这样做,事实上它允许任何东西相互堆叠。 Android 如何做到这一点?

更新使用 ZStack 添加了 iOS 视图的图像。

【问题讨论】:

  • 这与 android studio 无关,也与 xCode 无关。这些是用于开发应用程序的 IDE,特别是 android 和 ios 应用程序。您正在开发 for 的是 android,因此您正在寻找实现此 in android 的方法
  • Lastly, is there a quick method to blur an image in Android, again in xCode its just a property, is that the same for Android? 这完全是另一个问题,应该在另一个帖子中问这个问题,否则它会因为需要关注而被关闭
  • 删除了问题的模糊部分,谢谢
  • 也许你正在寻找类似stackoverflow.com/questions/29848276/…的东西?
  • 如果您可以发布您想要实现的目标的图片,我们可以尝试帮助您做到这一点

标签: android


【解决方案1】:

如果您使用的是 Jetpack Compose,则可以使用 Box 组合。

Box 的内容具有多个布局子级时,布局子级将按照声明的顺序一个在另一个之上。

https://developer.android.com/jetpack/compose/layout

https://foso.github.io/Jetpack-Compose-Playground/layout/box/

Box(
    Modifier
        .fillMaxWidth()
        .aspectRatio(1f)
) {
    Image(
        painter = painterResource(id = R.drawable.ic_launcher_background),
        contentDescription = "background"
    )
    Image(
        painter = painterResource(id = R.drawable.ic_launcher_foreground),
        contentDescription = "foreground"
    )
    Image(
        painter = painterResource(id = R.drawable.staunty_bb),
        contentDescription = "Image caption"
    )
}

如果您使用的是 View 系统,则有 FrameLayout 用于堆叠子 View(s)/Layout(s)。

https://developer.android.com/reference/android/widget/FrameLayout

【讨论】:

  • 正如我所说,我是 Android 新手,所以我不确定 Jetpack Compose 是什么?我目前只是在使用 Android Studio,这是对它的补充吗?那是免费的吗?
  • Jetpack Compose 是适用于 Android 的现代 UI 工具包。它在很多方面类似于 Apple 的 SwiftUI。是的,它是免费的。在这里查看developer.android.com/jetpack/compose
  • 这是一个 codelab 教程,用于在 Android Studio 中开始使用Jetpack Composedeveloper.android.com/codelabs/jetpack-compose-basics#0
  • 最后一个问题,这适用于 Java 还是仅适用于 Kotlin?我有我的 Java 应用程序。
  • Compose 仅​​适用于 Kotlin。我强烈建议您学习 Kotlin 进行 Android 开发。在 Java 上用 Kotlin 编写代码更有趣。
【解决方案2】:

您可以使用 FrameLayout 将视图堆叠在一起。类似于下面的 XML:

<FrameLayout
   android:id="+id/rootView"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   >

   <AppCompatImageView
       android:id="+id/imageViewOne"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

   <AppCompatImageView
       android:id="+id/imageViewTwo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

   <AppCompatImageView
       android:id="+id/imageViewThree"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

</FrameLayout>

一旦你对不同的视图组如 FrameLayout、LinearLayout 和 RelativeLayout 有了基本的了解,那么 ConstraintLayout 将是一个很好的练习选择。

【讨论】:

  • 我有一个关于您使用 AppCompatImageViewImageView 的问题。当我使用AppCompatImageView 时,图像在设计器中不可见,并且当我运行它时应用程序崩溃,而如果我使用ImageView 在设计器中成功显示图像并且应用程序运行时?有人能告诉我为什么AppCompatImageView 在那里吗?
  • 据我了解,AppCompatImageView 用于为一些在旧平台版本上不起作用的功能提供支持。动态背景色调等。使用ImageView 完全没问题。 androidx.appcompat.* 包包含应用程序兼容版本的视图,为一些否则无法工作的 API 提供向后兼容性。
  • 我对崩溃很好奇。您是否碰巧获得了崩溃的日志?如果它用于具有扩展Activity 而不是AppCompatActivity 的父活动的布局中,它可能会崩溃。 AppCompatActivity 也是类似的情况。它用于提供一些向后移植的功能,这些功能通常适用于较新的 android 版本而不是旧版本。
  • 这是我收到的错误消息android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class AppCompatImageView Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class AppCompatImageView Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.AppCompatImageView" on path: DexPathList[[zip file "/data/app/com.replaysport.pickemparty-hyXGz_8EtlTSNapkmD1NMA==/base.apk"],nativeLibraryDirectories=[/data/app/com.replaysport.pickemparty-hyXGz_8EtlTSNapkmD1NMA==/lib/x86, /system/lib]]
  • 奇怪的是,AppCompatImageView 没有被添加到类文件中。您可以尝试使用 AppCompatActivity 扩展您的活动类吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2011-01-29
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
相关资源
最近更新 更多