Intereting Posts
Java.lang.RuntimeException: невозможно инициализировать механизм эффекта для типа: 0bed4300-ddd6-11db-8f34-0002a5d5c51b Ошибка: -3 Android java.exe завершен с ненулевым значением выхода 1 Как реализовать BroadcastReceiver в классе обслуживания в Android? Шифрование и дешифрование в мобильных и .net веб-сервисах Внедрение Gradle vs API MediaStore – Uri для запроса всех типов файлов (носителей и носителей) Где находится встроенный накопитель Android Emulator Android Как синхронизировать две задачи Async? Admob против AdSense Фрагменты. Нужно ли использовать обертыватель активности вокруг фрагмента, который включает всю активность? ConstraintLayout против схемы координатора? Ndk-stack не работает Android: ExternalSystemException: индекс строки за пределами диапазона: -130 релиз здания Отключение навигационного ящика, включение кнопки «вверх» / «вверх-вниз» в фрагментах Как проверить неограниченный доступ в Интернет? (Обнаружение портативного портала)

Как вывести взгляд на все?

У меня есть активность и много виджетов, некоторые из них имеют анимацию, и из-за анимации некоторые из виджетов перемещаются (переводятся) друг над другом. Например, текстовое представление перемещается по некоторым кнопкам. , ,

Теперь я хочу, чтобы кнопки всегда были на передней панели. И когда текстовое изображение движется, я хочу двигаться позади кнопок.

Я не могу этого добиться, я пробовал все, что знаю, и «bringToFront ()« definitelly »не работает.

Заметка: Я не хочу контролировать z-порядок по порядку размещения элемента в макете, потому что я просто не могу :), макет сложный, и я не могу поместить все кнопки при попрошайке макета

Solutions Collecting From Web of "Как вывести взгляд на все?"

Вы можете вызвать функцию bringToFront () в представлении, которое вы хотите получить спереди

Это пример:

  yourView.bringToFront(); 

bringToFront() – это правильный путь, но, обратите bringToFront() , что вы должны вызвать bringToFront() и invalidate() на самом высоком уровне (под вашим корневым представлением), например:

Иерархия вашего представления:

 -RelativeLayout |--LinearLayout1 |------Button1 |------Button2 |------Button3 |--ImageView |--LinearLayout2 |------Button4 |------Button5 |------Button6 

Итак, когда вы активируете свои кнопки (1-> 6), ваши кнопки будут под (ниже) ImageView . Чтобы перенести это (вверху) ImageView вы должны вызвать bringToFront() и invalidate() на вашем LinearLayout s. Тогда это сработает 🙂 ** ПРИМЕЧАНИЕ. Не забудьте установить android:clipChildren="false" для вашего корневого макета или градиента-анимации в виде анимации. Давайте посмотрим на мой настоящий код:

.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:hw="http://schemas.android.com/apk/res-auto" android:id="@+id/layout_parent" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/common_theme_color" android:orientation="vertical" > <com.binh.helloworld.customviews.HWActionBar android:id="@+id/action_bar" android:layout_width="match_parent" android:layout_height="@dimen/dimen_actionbar_height" android:layout_alignParentTop="true" hw:titleText="@string/app_name" > </com.binh.helloworld.customviews.HWActionBar> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/action_bar" android:clipChildren="false" > <LinearLayout android:id="@+id/layout_top" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> <ImageView android:id="@+id/imgv_main" android:layout_width="@dimen/common_imgv_height" android:layout_height="@dimen/common_imgv_height" android:layout_centerInParent="true" android:contentDescription="@string/app_name" android:src="@drawable/ic_launcher" /> <LinearLayout android:id="@+id/layout_bottom" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </RelativeLayout> </RelativeLayout> 

Некоторый код в .java

 private LinearLayout layoutTop, layoutBottom; ... layoutTop = (LinearLayout) rootView.findViewById(R.id.layout_top); layoutBottom = (LinearLayout) rootView.findViewById(R.id.layout_bottom); ... //when animate back //dragedView is my layoutTop's child view (i added programmatically) (like buttons in above example) dragedView.setVisibility(View.GONE); layoutTop.bringToFront(); layoutTop.invalidate(); dragedView.startAnimation(animation); // TranslateAnimation dragedView.setVisibility(View.VISIBLE); 

Глюк!

Я просматривал переполнение стека, чтобы найти хороший ответ, и когда я не смог найти его, я просмотрел документы.

Никто, кажется, не наткнулся на этот простой ответ:

 ViewCompat.setTranslationZ(view, translationZ); 

Перевод по умолчанию z равен 0.0

Попробуйте FrameLayout , это дает вам возможность размещать взгляды один над другим. Вы можете создать два LinearLayouts : один с фоном и один с видом переднего плана и объединить их с помощью FrameLayout . Надеюсь это поможет.

Вам нужно использовать framelayout. И лучший способ сделать это – сделать вид невидимым, если это не требуется. Также вам нужно установить положение для каждого вида, чтобы они перемещались в соответствии с соответствующей позицией

Может быть другой способ, который экономит день. Просто запустите новый диалог с нужным макетом и просто покажите его. Мне нужно это для показа LoadView над DialogFragment, и это был единственный способ добиться успеха.

 Dialog topDialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar); topDialog.setContentView(R.layout.dialog_top); topDialog.show(); 

В некоторых случаях, как и мой, функция notToFront () может не работать. Но содержимое макета dialog_top должно переопределять что-либо на уровне ui. Но в любом случае это уродливое обходное решение.

Еще более простое решение – отредактировать XML активности. использование

 android:translationZ="" 

Я столкнулся с той же проблемой. Для меня работало следующее решение.

  FrameLayout glFrame=(FrameLayout) findViewById(R.id.animatedView); glFrame.addView(yourView); glFrame.bringToFront(); glFrame.invalidate(); 

Если вы используете LinearLayout вы должны вызвать myView.bringToFront() и после вызова функции parentView.requestLayout() и parentView.invalidate() чтобы заставить родителя перерисовывать новый порядок parentView.invalidate() .

Вы можете установить видимость на false для других видов.

 view1.setVisibility(View.GONE); view2.setVisibility(View.GONE); ... 

или

 view1.setVisibility(View.INVISIBLE); view2.setVisibility(View.INVISIBLE); ... 

И установить

 viewN.setVisibility(View.VISIBLE);