Мое приложение в одном из фрагментов рисует карту в поверхностном виде с наложением кнопок и текста.
Большинство других фрагментов представляют собой списки. Моя проблема в том, что при переходе между картой и другим фрагментом в виде карты на мгновение появляются уродливые черные прямоугольники, где размещены виды текста и кнопок. Это кажется более заметным при переходе обратно к карте, хотя это происходит в обоих направлениях. Я использую анимацию слайд-влево/вправо, которая хорошо работает во всех других отношениях. Я пробовал другие анимации и не анимацию. Установка невидимости текста и кнопок перед переходом также не помогает, так как представления все еще находятся в оверлее.
Если у кого-то есть идеи, как можно добиться чистого перехода фрагмента, это будет очень признательно. Я использую диспетчер фрагментов поддержки.
Вот мой код (текста и кнопок значительно больше, чем показано ниже):
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>
SurfaceView
имеют долгую историю проблем. Рассмотрите возможность использованияTextureView
, если вы поддерживаете только уровень API 11+, так какTextureView
должен лучше работать с анимацией. - person CommonsWare   schedule 17.02.2013