Android - Скрытие просмотров - PullRequest
3 голосов
/ 08 марта 2011

Хорошо, я немного осмотрелся и понял, как ВЫ ПРЕДЛАГАЕТСЯ это сделать, но для меня это просто не работает.

Мне нужно иметь возможность устанавливать альфа RelativeLayout как в XML, так и в коде. Для моего 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, он говорит мне, что этот метод не определен для этого объекта.

Почему я не могу управлять альфа-прозрачностью для объекта RelativeLayout в Android? Я что-то пропустил? Спасибо!

Обновление

Хотя использование свойства видимости работает, оно не позволяет мне щелкнуть ViewGroup. Это важно для меня, потому что я использую OnTouchListener ViewGroup.

Я пытаюсь создать слой с элементами управления мультимедиа, изначально скрытыми. когда пользователь нажимает что-либо на экране, я хочу, чтобы элементы управления исчезали, а когда они снова касаются экрана, я хочу, чтобы элементы управления исчезали. У меня эта часть уже работает. Я использую группу просмотра, которая находится поверх всего моего приложения с прикрепленным OnTouchListener, который может определить, было ли оно затронуто или нет. Моя проблема заключается в том, что после запуска анимации исчезают элементы управления, они снова появляются. Если я воспользуюсь предложением @Hydrangea, я смогу сделать его невидимым и немедленно сделать его невидимым. Это дает мне желаемый эффект, но тогда ViewGroup становится неактивным, и пользователь не может заставить элементы управления вернуться (или уйти, в зависимости от того, что мы решили сделать в первую очередь).

Надеюсь, это имеет смысл.

Ответы [ 7 ]

16 голосов
/ 16 марта 2011

Вы захотите использовать альфа-анимацию для постепенного исчезновения. Это будет поддерживать ваши сенсорные события для ваших макетов. Вот пример

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>
3 голосов
/ 17 марта 2011

Свойство alpha является новым в Android 3.0, и это не самый эффективный способ скрыть представление.Используйте View.setVisibility () или Android: видимость, чтобы достичь того, что вы хотите.

3 голосов
/ 08 марта 2011

Если вам не нужны уровни альфа от 0 до 1, я бы предложил, если вы действительно хотите сделать этот элемент невидимым, использовать setVisibility ();

android:visibility="invisible"

Я проверил андроид: альфа-линия, и мой иде тоже не находит.Я не могу понять почему, хотя ... документация кажется довольно ясной.

1 голос
/ 02 октября 2012

Вы можете добавить к правому ответу следующую опцию:

animation.setDuration(xxx);

К каждому экземпляру анимации.Таким образом, ваша анимация будет выглядеть лучше.

1 голос
/ 08 марта 2011

Вы можете установить альфа, установив (фон) цвет, я думаю.Значения цвета могут быть в формате #aarrggbb (альфа, красный, зеленый, синий).

0 голосов
/ 16 марта 2011

Используйте onTouchEvent в Активность , и тогда вы можете получить сенсорное событие для управления вашим RelativeLayout, даже если он «невидим».

0 голосов
/ 14 марта 2011

Исходя из вашего описания, вы должны иметь возможность создать представление, которое содержит только относительный макет и для которого установлено 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...