3

さて、私は周りを見回して、あなたがそれを行うように想定されている方法を確認しましたが、私にとっては、それは機能していません。

XMLとコードの両方でRelativeLayoutのアルファを設定できる必要があります。私のXMLには、次のものがあります

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/player_controls"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:alpha="0.0">
    <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/player_controls_touch_me"
        >
        </RelativeLayout>
</RelativeLayout>

エラーが発生します:no resource identifier found for attribute 'alpha' in package 'android'

また、Androidのドキュメントに基づくと、setAlpha(double)任意のViewオブジェクトを呼び出すことができるはずですが、RelativeLayoutでその呼び出しを行おうとすると、このオブジェクトに対してこのメ​​ソッドが定義されていないことがわかります。

AndroidでRelativeLayoutオブジェクトのアルファ透明度を制御できないのはなぜですか?私は何かが足りないのですか?ありがとう!

アップデート

可視性プロパティの使用は機能しますが、ViewGroupをクリックできなくなります。私はViewGroupのOnTouchListenerを利用しているので、これは私にとって重要です。

私がやろうとしているのは、最初は非表示になっているメディアコントロールを備えたレイヤーを作成することです。ユーザーが画面をタップしたときにコントロールをフェードインさせ、もう一度画面をタップしたときにコントロールをフェードアウトさせます。この部分はすでに機能しています。アプリケーション全体の上にあるビューグループを使用しており、OnTouchListenerが接続されており、タッチされているかどうかを判断できます。私の問題は、アニメーションを実行してコントロールをフェードアウトした後、それらが再表示されることです。@Hydrangeaの提案を使用すると、フェードアウトしてすぐに非表示にすることができます。これにより、目的の効果が得られますが、ViewGroupはクリックできなくなり、ユーザーはコントロールを元に戻すことができません(または、最初に行うことを決定した場合は、元に戻すことができません)。

これが理にかなっていることを願っています。

4

7 に答える 7

15

アルファアニメーションを使用して、物事をフェードインおよびフェードアウトする必要があります。これにより、レイアウトのタッチイベントが維持されます。これが例です

public class Main extends Activity {
/** Called when the activity is first created. */

private boolean mShowing = false;

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

    findViewById(R.id.textview).setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0) {
            if(mShowing){
            Animation animation = new AlphaAnimation(1.0f, 0.0f);
            animation.setFillAfter(true);
            arg0.startAnimation(animation);
            } else {
                Animation animation = new AlphaAnimation(0.0f, 1.0f);
                animation.setFillAfter(true);
                arg0.startAnimation(animation);
            }

            mShowing = !mShowing;
        }

    });
}

}

これが付随するxmlです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:id="@+id/textview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:clickable="true"
    />
</LinearLayout>
于 2011-03-15T21:41:33.393 に答える
3

0から1の間のアルファのレベルが必要でない限り、このアイテムを本当に非表示にしたい場合は、setVisibility()を使用することをお勧めします。

android:visibility="invisible"

android:alpha行をチェックアウトしましたが、私のideもそれを見つけられません。理由はわかりませんが...ドキュメントはかなり明確に見えます。

于 2011-03-08T05:54:25.673 に答える
3

alphaプロパティはAndroid3.0の新機能であり、ビューを非表示にする最も効率的な方法ではありません。View.setVisibility()またはandroid:visibilityを使用して、目的を達成します。

于 2011-03-17T18:22:37.663 に答える
1

私が推測する(背景)色を設定することでアルファを設定できます。色の値は、#aarrggbb(アルファ、赤、緑、青)の形式にすることができます。

于 2011-03-08T07:34:09.907 に答える
1

次のオプションを正しい答えに追加できます。

animation.setDuration(xxx);

各アニメーションインスタンスに。このようにして、アニメーションの見栄えが良くなります。

于 2012-10-01T20:52:09.620 に答える
0

説明に基づいて、相対レイアウトのみを含むビューを作成し、onClickListenerを設定できるはずです。このようにして、相対レイアウトの可視性を非表示に設定できますが、それでもクリックを登録できます。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/clickable_layout"
    android:layout_height="match_parent"
    android:layout_width="match_parent" >
    <RelativeLayout
        android:id="@+id/player_controls"
        android:layout_height="match_parent"
        android:layout_width="match_parent" >
        <RelativeLayout
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:id="@+id/player_controls_touch_me"
        >
        </RelativeLayout>
    </RelativeLayout>
</FrameLayout>
于 2011-03-14T19:21:24.407 に答える
0

ActivityでonTouchEventを使用すると、タッチイベントを取得して、「非表示」であっても、RelativeLayoutを制御できます。

于 2011-03-16T17:58:44.160 に答える