дамы и господа,Android анимации фрагмент не работает, как ожидается,
Я учусь развиваться для андроид, и я немного застрял с фрагмента анимации.
У меня есть деятельность с кнопкой вверху. При нажатии кнопки я программно добавляю синий фрагмент при создании действия. При нажатии кнопки я хочу, чтобы синий фрагмент исчез, и появится зеленый.
Он отлично работает без анимации (оставил его в верхней части метода).
Затем я пытаюсь использовать метод replace() и после этого удалять + добавлять методы. Не ведите себя так, как я ожидал бы ...
заменить: я нажимаю кнопку, и синий фрагмент выходит. Зеленый фрагмент уже присутствует под синим. Затем зеленый цвет исчезает и скользит в ожидании.
удалить/добавить: синий фрагмент исчезает без анимации, зеленый фрагмент уже присутствует, то исчезает и скользит в
Может кто-то пожалуйста, дайте мне руку фиксирующую в обоих направлениях? Я сделал много поисковых запросов, но не могу решить, в чем проблема.
Кроме того, несколько слов, объясняющих, где неправильно, чтобы я не повторил ту же ошибку снова в будущем.
Вот код основной деятельности:
package com.example.zz0011_detach_attach_fragment;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity
{
FragmentManager fm = getFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.blueFragmentPlaceholder, new BlueFragment(), "blueFragmentTag");
ft.commit();
}
public void buttonClicked (View view)
{
// ==============================================================================
// ================================================================= NO ANIMATION
// ------------------------------------------------------------------- WORKS FINE
// ==============================================================================
// FragmentTransaction ft = getFragmentManager().beginTransaction();
// ft.remove(fm.findFragmentByTag("blueFragmentTag"));
// ft.add(R.id.greenFragmentPlaceholder, new GreenFragment(), "greenFragmentTag");
// ft.commit();
// ==============================================================================
// ================================================================== REPLACEMENT
// ----------------------------------------------------- BLUE FRAGMENT SLIDES OUT
// ----- GREEN FRAGMENT IS ALREADY PRESENT UNDERNEATH, DISAPPEARS, SLIDES BACK IN
// ==============================================================================
// getFragmentManager().beginTransaction().setCustomAnimations
// (
// R.animator.slide_in, R.animator.slide_out, R.animator.slide_out, R.animator.slide_in
// ).replace
// (
// getFragmentManager().findFragmentByTag ("blueFragmentTag").getId(), new GreenFragment()
// ).commit();
// ==============================================================================
// ========================================================= REMOVAL AND ADDITION
// --------------------------------- BLUE FRAGMENT DISAPPEARS WITHOUT ANIMATION
// ----- GREEN FRAGMENT IS ALREADY PRESENT UNDERNEATH, DISAPPEARS, SLIDES BACK IN
// ==============================================================================
getFragmentManager().beginTransaction().setCustomAnimations (R.animator.slide_out, 0).
remove (getFragmentManager().findFragmentByTag ("blueFragmentTag")).commit();
getFragmentManager().beginTransaction().setCustomAnimations (R.animator.slide_in, 0).
add(R.id.greenFragmentPlaceholder, new GreenFragment(), "greenFragmentTag").commit();
}
}
Это android_main XML-файл
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.zz0011_detach_attach_fragment.MainActivity" >
<Button
android:id="@+id/clicableButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="buttonClicked"
android:text="@string/click_me"
android:textAlignment="center" />
<FrameLayout
android:id="@+id/blueFragmentPlaceholder"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_below="@id/clicableButton"
android:layout_marginTop="20dp"
>
</FrameLayout>
---- EDIT
Я нашел, где проблема была, это было в другом файле, который я теперь добавляю к исходному сообщению
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:propertyName="x"
android:valueFrom="-1000"
android:valueTo="0"
android:valueType="floatType"
android:startOffset="300" />
</set>
Причина появления зеленого фрагмента была значением startOffset. Его не должно быть
Карнал, благодарю вас за помощь. Я изменил свой код соответственно, и я только что узнал о стеке, как я уже сказал, только что начался ... Однако та же самая проблема, которая была у меня до этого, до сих пор сохраняется: исходный фрагмент выходит, второй уже есть, затем исчезает и слайды назад. Любая идея о том, почему это происходит? – Dan
Нет проблем, удачи! – Carnal
Извините, Carnal Я все еще пытаюсь понять, как публиковать ответы в правильной рамке, а не в этих крошечных коробках! Введите ключ, который отправил мой второй пост вместо новой строки ... Добавленный бит для анимации следующий: ft.setCustomAnimations (R.animator.slide_in, R.animator.slide_out, R.animator.slide_out, R.animator.slide_in); – Dan