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

そのビューの他の要素の上に半透明のパネルを描画できます

まさにこれ。その背後にあるものをオーバーレイするには、「透明度」が必要です。

透明度は機能している可能性がありますが、親レイアウトの背景は透明 (#00ffffff) であるため、オーバーレイの背景は黒く見えます。

ルート レイアウトの背景を変更すると、透過性が機能していることがわかります。

ビューの他の要素をオーバーレイする場合は、レイアウトのそのセクションの子として透過性が必要です。現在のレイアウト方法は次のようになります。

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

必要なのは次のとおりです。

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

フォローしているチュートリアルのソースを見ると、カスタム透明パネルがルート アプリケーション ビューではなく、MapView の子であることがわかります。これが、MapView コンテンツをオーバーレイできる理由です。

于 2012-12-18T23:04:21.813 に答える
0

OK、答えがないので、parent.addView(view)背景が透明なオーバーレイ ビューを追加する方法はないと思います。レイアウトの右端 (スクロールバー) に狭い透明なビューを追加して、表示されたアイテムの大きなリスト内の位置を示すビットマップを描画できるようにしたいと考えていました。

LinearLayout代わりに、レイアウト全体をわずかに狭くし、黒い背景を持つ右端を狭くするためのスペースを残しました。その中にビットマップを描画すると、次のようになります。

ここに画像の説明を入力

色のブロックの上にポインターを置くことをお勧めしますが、将来この質問を見つけてその方法を教えてくれるグルがいない限り、私は十分に近づいています.

バズ。

于 2012-10-09T13:12:29.047 に答える