некрасивый переход фрагмента на поверхность с наложением

Мое приложение в одном из фрагментов рисует карту в поверхностном виде с наложением кнопок и текста.

Большинство других фрагментов представляют собой списки. Моя проблема в том, что при переходе между картой и другим фрагментом в виде карты на мгновение появляются уродливые черные прямоугольники, где размещены виды текста и кнопок. Это кажется более заметным при переходе обратно к карте, хотя это происходит в обоих направлениях. Я использую анимацию слайд-влево/вправо, которая хорошо работает во всех других отношениях. Я пробовал другие анимации и не анимацию. Установка невидимости текста и кнопок перед переходом также не помогает, так как представления все еще находятся в оверлее.

Если у кого-то есть идеи, как можно добиться чистого перехода фрагмента, это будет очень признательно. Я использую диспетчер фрагментов поддержки.

Вот мой код (текста и кнопок значительно больше, чем показано ниже):

XML-файл макета:

<?xml version="1.0" encoding="utf-8"?>


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapframeview"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
 >


<com.mypackage.MapView 
    android:id="@+id/maptileview"  
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
</com.mypackage.MapView>

<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mapoverlay"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" >

   <TextView
    android:id="@+id/titletext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentTop="true"
    android:paddingTop="10dp"
    android:textColor="#FFFFFF"
    android:textSize="24dp"
    android:textStyle="bold" />

    <ImageButton
    android:id="@+id/bookButton"
    android:onClick="onClickBookButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:paddingTop="15dp"
    android:paddingRight="15dp"
    android:background="@android:color/transparent"
    android:src="@drawable/bookbutton">
    </ImageButton>

  </RelativeLayout>

 </FrameLayout>        

код перехода фрагмента:

 private void startNextFragment(Fragment newFragment, String fragment tag) {

FragmentManager fragmentManager = getSupportFragmentManager();

    FragmentTransaction transaction = 
            fragmentManager.beginTransaction();

    transaction.setCustomAnimations(R.layout.slideinright,
                                        R.layout.slideoutleft,  
                                        R.layout.slideinleft, 
                                        R.layout.slideoutright);

    transaction.replace(R.id.fragment_container, newFragment, fragmentTag);
    transaction.addToBackStack(null);

    // Commit the transaction
    transaction.commit();
}

анимация XML:

<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/res/anim/slide_in_right.xml */
-->

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

<?xml version="1.0" encoding="utf-8"?>
<!--
/* //device/apps/common/res/anim/slide_out_left.xml*/
-->

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-50%p"
        android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

person Chris Fawcett    schedule 17.02.2013    source источник
comment
Возможный дубликат stackoverflow.com/ вопросы/14419521/   -  person Ben Max Rubinstein    schedule 17.02.2013
comment
Спасибо - это вполне может быть связанной проблемой, но я не думаю, что это дубликат, потому что проблема связана с наложением. Без накладки переход чистый. И мы не используем карты Google.   -  person Chris Fawcett    schedule 17.02.2013
comment
Все это может быть правдой, но анимационные эффекты с участием SurfaceView имеют долгую историю проблем. Рассмотрите возможность использования TextureView, если вы поддерживаете только уровень API 11+, так как TextureView должен лучше работать с анимацией.   -  person CommonsWare    schedule 17.02.2013
comment
Мы должны поддерживать Gingerbread, это не вариант. Кроме того, нам нужен SurfaceView для полной функциональности карты.   -  person Chris Fawcett    schedule 17.02.2013


Ответы (1)


Если вы используете SurfaceView, сделайте фон прозрачным.

android:background="@android:color/transparent"

Мне помогло, мерцание исчезло.

person StarDust    schedule 18.04.2013