1

我有一个布局简单的活动(一堆彩色面板),我试图在顶部的透明视图上覆盖一个小的移动图形。就像这里的@umar 一样,我正在关注本教程,但我的叠加视图拒绝透明。我可以使视图出现,它只包含它应该包含的内容,但是视图的背景是黑色的,但是我尝试使其透明失败。我已经尝试过 SO 中提到的一些解决方案,但结果总是一样的。

我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/everything"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#00ffffff"
>

<LinearLayout
    android:id="@+id/row_1_bg"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    android:orientation="horizontal"
    >

    <FrameLayout
        android:layout_height="fill_parent"
        android:layout_width="100dp"
        >

        <LinearLayout
            android:id="@+id/row_1_table"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:background="#808080"
            >

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1"
                android:orientation="horizontal"
                >

            <TextView  
                android:id="@+id/row_1_pantone"
                android:paddingLeft="6dip"
                android:textColor="#f0f0f0"
                android:textStyle="bold"
                android:gravity="center_vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                >
            </TextView>
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:orientation="horizontal"
            >
            <TextView  
                android:id="@+id/row_1_rgb"
                android:paddingLeft="6dip"
                android:textColor="#f0f0f0"
                android:textStyle="bold"
                android:gravity="center_vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                >
            </TextView>
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1"
            android:orientation="horizontal"
            >
            <TextView  
                android:id="@+id/row_1_hex"
                android:paddingLeft="6dip"
                android:textColor="#f0f0f0"
                android:textStyle="bold"
                android:gravity="center_vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                >
            </TextView>
        </LinearLayout>
    </LinearLayout>
</FrameLayout>
</LinearLayout>

<LinearLayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:paddingRight="5px" 
android:paddingTop="5px" 
android:paddingLeft="5px" 
android:gravity="bottom" 
android:orientation="vertical"
android:background="#00808080"> 

<barry.pantone.TransparentPanel 
        android:layout_height="wrap_content" 
        android:layout_width="fill_parent" 
        android:id="@+id/transparent_panel" 
        android:paddingRight="5px" 
        android:paddingTop="5px" 
        android:paddingLeft="5px" 
        android:paddingBottom="5px"
        android:background="#00808080"> 

        <Button 
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content" 
            android:id="@+id/button_click_me" 
            android:text="Click Me!"
            /> 
</barry.pantone.TransparentPanel> 
</LinearLayout>

</LinearLayout>

我的 TransparentPanel.java 直接来自教程,使用:

innerPaint.setARGB(225, 75, 75, 75);

制作一个透明面板,这是我在主要活动中的 onCreate :

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Resources res = getResources();
    sPantone = res.getStringArray(R.array.pantone); // gets colour definitions

    iHeight = getWindowManager().getDefaultDisplay().getHeight();

    PopulateTable (); // draws colours in the various layout elements
    }

问题是无论我在视图中做什么都很好——我可以在该视图中的其他元素上绘制一个半透明面板,但是覆盖视图本身有一个黑色背景,它会遮挡下面的布局。如果有人能帮助我理解为什么透明度不起作用,我将永远感激不尽。

非常感谢

巴兹

编辑

根据另一个想法,我尝试将叠加层的定义移出到它自己的 XML 文件中,并使用 LayoutInflater 来膨胀并添加新视图。没有。完全相同 - 附加视图具有纯色背景。这是 tranny.xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
android:background="#80000040"
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:paddingRight="5dip" 
android:paddingTop="5dip" 
android:paddingLeft="5dip" 
android:gravity="bottom" 
android:orientation="vertical"
> 
<Button 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:id="@+id/button_click_me" 
    android:text="Click Me!"
    /> 
</LinearLayout>

这是来自 onCreate 的代码,用于扩充新视图并将其添加到主布局中:

private View view;
ViewGroup parent = (ViewGroup) findViewById(R.id.everything);
view = LayoutInflater.from(getBaseContext()).inflate(R.layout.tranny, parent, false);
parent.addView(view);

基本上我已经开始使用不同的技术创建完全相同的结果。第一次了解 LayoutInflater 很方便,但对透明度没有帮助:(

4

2 回答 2

0

好的,没有答案,所以我假设无法使用parent.addView(view)添加具有透明背景的覆盖视图。我曾希望在我的布局(滚动条)的右侧边缘添加一个狭窄的透明视图,我可以在其中绘制一个位图,指示在显示项目的大列表中的位置。

相反,我现在让我的整个布局稍微窄了一点,并为LinearLayout右边缘留下了空间,它有一个黑色的背景,然后画了我的位图,所以我得到了这个:

在此处输入图像描述

我更愿意将指针放在色块的顶部,但除非将来某个大师发现这个问题并向我们展示如何去做,否则我已经足够接近了。

巴兹。

于 2012-10-09T13:12:29.047 回答
0

我可以在该视图中的其他元素上绘制一个半透明面板

正是这个。你需要“透明度”来覆盖它背后的东西。

透明度可能有效,但父布局的背景是透明的 (#00ffffff),因此叠加层的背景看起来是黑色的。

更改根布局的背景,您可能会看到透明度正在起作用。

如果您希望它覆盖视图的其他元素,则需要将透明度作为布局的该部分的子元素。它目前的布局方式是这样的:

<App>
  <Content>
  </Content>
  <Overlay>
  </Overlay>
</App>

而您需要:

<App>
  <Content>
    <Overlay>
    </Overlay>
  </Content>
</App>

如果您查看正在学习的教程的源代码,您会看到自定义透明面板是 MapView 的子项,而不是根应用程序视图。这就是它能够覆盖 MapView 内容的原因。

于 2012-12-18T23:04:21.813 回答