Android中的视图重叠


75

Android中是否可能有重叠的视图?我想有一个ImageView在前面有一个透明的png,在后台有另一个视图。

编辑:

这就是我目前所拥有的,问题是imageView中的图像不透明,应该透明的部分只是黑色。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/gallerylayout"
>
<Gallery android:id="@+id/overview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

 <ImageView android:id="@+id/navigmaske"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/navigmask"
    /> 

</RelativeLayout>

编辑:

我开始使用它,它是团队中另一个程序员的主题文件。刚刚改变了这个

<item name="android:background">#FF000000</item>

对此

<item name="android:background">#00000000</item>

您所拥有的应该可以工作-您确定图库具有可见的内容并且navigmaske可绘制对象是具有透明性的PNG吗?
Reto Meier

是的,画廊在没有覆盖层的情况下是可见的,并且我确定PNG是透明的
Alexander Stolz,2009年

Answers:


71

Android本机可处理视图和可绘制对象(包括PNG图像)之间的透明性,因此您所描述的场景(ImageView位于前面的部分透明性Gallery)当然是可能的。

如果您遇到问题,则可能与布局或图像有关。我已经复制了您描述的布局,并成功实现了您想要的效果。这是我使用的确切布局。

<RelativeLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/gallerylayout"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <Gallery
    android:id="@+id/overview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
  />
  <ImageView
    android:id="@+id/navigmaske"
    android:background="#0000"      
    android:src="@drawable/navigmask"
    android:scaleType="fitXY"
    android:layout_alignTop="@id/overview"
    android:layout_alignBottom="@id/overview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
  />
</RelativeLayout>

请注意,我已将父级RelativeLayout的高度和宽度更改fill_parent为通常对主Activity所需的高度和宽度。然后我对准顶部和底部的ImageView顶部和底部Gallery,以确保它集中在它的前面。

我还明确将的背景设置ImageView为透明。

至于图像可绘制对象本身,如果您将PNG文件放在某个地方供我查看,则可以在项目中使用它,看看它是否负责。


真好!我尝试将ImageView背景设置为#0000(和@android:color / transparent)……无济于事。如果我尝试淡化它(将alpha从1.0降低到0.0),它将淡化为黑色,而不是淡化为透明。这是在Android 2.0上。
Joe D'Andrea

3
哈!我正在使用LinearLayout。我将其更改为Relative,然后将ImageView放在最后。现在淡入淡出“可以正常工作”……是的!感谢吨的代码/提示。这暗示了我的傻瓜。
Joe D'Andrea

2
嗨,我使用相同的xml布局编码,但是没有显示我的透明图像,它仅显示黑屏。我想在代码中添加的任何内容。
David

考虑到功能性,我认为FrameLayout出于这种目的,通常应该首选这种方法,因为这样可以大大降低布局开销。但是,对于API <11,FrameLayout无法处理将第二个孩子的高度正确传播到第一个孩子的上述组合,因此RelativeLayout在这种情况下,这是您唯一的选择;看这里
类堆叠器

9

此外,请看一下FrameLayout,这是Camera Gallery的应用程序如何实现Zoom按钮叠加的方式。


1
我一直FrameLayout为此目的找到完美的去处。但是,我现在才发现,在API 11之前,FrameLayout无法将最大测量高度传播给它的所有子级,请参见此处。因此,为了支持Android 2,RelativeLayout除非必须达到预定高度,否则必须使用。
类堆叠器

7

如果要在布局上添加自定义“叠加”屏幕,则可以创建“自定义线性布局”并控制图形和按键事件。你可以在我的教程-覆盖在Android布局- http://prasanta-paul.blogspot.com/2010/08/overlay-on-android-layout.html


当然是一个不错的实验,感谢您分享代码。但这可以轻松实现,FrameLayout除非您的特定情况受到API 11之前的错误的影响,请参见此处,在这种情况下,您仍然可以使用RelativeLayout
Class Stacker

1

可见图库会更改可见性,这就是您如何在其他视图重叠处获得图库。Home示例应用程序提供了此技术的一些很好的示例。



-2

是的,那是可能的。然而,挑战在于正确地布局它们。最简单的方法是使用AbsoluteLayout,然后将两个图像放置在您想要的位置。您无需对透明png进行任何特殊处理,除非稍后将其添加到布局中。


16
AbsoluteLayout现在已贬值。没有人应该再使用它。
num1 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.