Проблема с анимацией фрагмента - PullRequest
0 голосов
/ 15 октября 2018

Работа над простой анимацией во фрагментах.У меня есть три фрагмента, в которых я должен анимировать представления внутри фрагмента, но проблема, с которой я сейчас сталкиваюсь, заключается в том, что анимация не работает во втором фрагменте, а когда я снова посещаю фрагмент, анимация также не работает.

Класс адаптера

public class MyPageAdapter extends FragmentPagerAdapter {
    private final int NUM_ITEMS = 3;
    Context mContext;

    public MyPageAdapter(FragmentManager fm, Context mContext) {
        super(fm);
        this.mContext = mContext;
    }

    public int getCount() {
        return NUM_ITEMS;
    }

    public Fragment getItem(int position) {
        // MainActivity.updatedposition(position);

        if (position == 0)
            return SliderOne.newInstance();
        else if (position == 1)
            return SliderTwo.newInstance();
        else if (position == 2)
            return SliderThree.newInstance();
        return null;
    }
}

Активность ползунка

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            public void onPageScrollStateChanged(int state) {
            }

            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            public void onPageSelected(int position) {
                if (position == 0) {
                    SliderOne fragment = new SliderOne();
                    fragment.initAnimation(mContext);
                }
                else if (position == 1) {
                    SliderTwo fragment = new SliderTwo();
                    fragment.initAnimation(mContext);
                }
                if (position == 2) {
                    SliderThree fragment = new SliderThree();
                    fragment.initAnimation(mContext);
                }
                // Check if this is the page you want.
            }
        });

Класс фрагмента

public class SliderThree extends Fragment implements PageSelectedAnimation {

    ImageView logo;
    TextView tv_appname;
    CustomTextView tv_msg_2;
    Animation smalltobig, nothingtocome, btnanim;
    Context mContext;

    public static SliderThree newInstance() {
        SliderThree fragment = new SliderThree();
        return fragment;
    }


    public SliderThree() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.slider_three, null);
        mContext = getActivity();
        logo = root.findViewById(R.id.logo);
        tv_appname = root.findViewById(R.id.tv_appname);
        tv_msg_2 = root.findViewById(R.id.tv_msg_2);
        tv_msg_2.setText(Html.fromHtml("Message other users to negotiate<br><p>the perfect trade or deal.Always</p><p>use your best judgement when</p><p>buying or selling.</p>"));

        return root;
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void initAnimation(Context mContext) {
        smalltobig = AnimationUtils.loadAnimation(mContext, R.anim.smalltobig);
        nothingtocome = AnimationUtils.loadAnimation(mContext, R.anim.nothingtocome);
        btnanim = AnimationUtils.loadAnimation(mContext, R.anim.nothingtocome);
        logo.setAnimation(smalltobig);
        logo.setAnimation(nothingtocome);
        tv_appname.setAnimation(btnanim);
    }
}

интерфейс создан

public interface PageSelectedAnimation {

    void initAnimation(Context context);
}

Ошибка: -

java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.view.View android.view.View.findViewById (int)' для пустой ссылки на объект в com.xxx.slider.SliderThree.initAnimation (SliderThree.java:79) на com.xxx.activities.SliderActivity $ 2.onPageSelected (SliderActivity.java:103)

Совместное использование моего кода: Код фрагмента

1 Ответ

0 голосов
/ 15 октября 2018

Я предполагаю, что из используемых вами тегов вы включаете эти фрагменты в ViewPager.

ViewPager заряжает текущий и соседние элементы, поэтому они готовы при необходимости.Поэтому ваша анимация выходит из экрана, когда она заряжается.

Я бы предложил использовать ViewPager.onPageChangeListener:

viewPager.addOnPageChangeListener(new OnPageChangeListener() {
    public void onPageScrollStateChanged(int state) {}
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

    public void onPageSelected(int position) {
        // Check if this is the page you want.
    }
});

и запустить оттуда метод анимации.

РЕДАКТИРОВАТЬ:

Вы можете сделать это, создавая и внедряя интерфейс для каждого фрагмента.

interface PageSelectedAnimation{
    fun initAnimation()
}

.

public class SliderThree extends Fragment implements PageSelectedAnimation

и, наконец:

public void onPageSelected(int position) {
        ((PageSelectedAnimation)getYourFragment(position)).initAnimation()
    }
...