gpt4 book ai didi

java - 在 fragment 状态适配器内的 fragment 之间滑动时,动画(textView)不断取消

转载 作者:行者123 更新时间:2023-12-01 18:28:37 25 4
gpt4 key购买 nike

  • 我正在 android studio (Java) 上开发一个应用
  • 我创建了一个 tabLayout,它使用 viewPager2 + Fragment State Adapter 在两个 fragment 之间滑动
  • 在fragment02上,我为textView设置了动画。
  • 当我滑动到 fragment 上时,动画会按其应有的方式循环播放。
  • 但是,如果我滑开 fragment 然后再滑开,动画将不再播放。
  • 我真的需要动画继续。

欢迎任何建议,我提前感谢您:)

请注意,我对此还很陌生。

// MainActivity.java

package Zoomie.App;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

getSupportActionBar().setTitle("Welcome");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

ViewPager2 viewPager2 = findViewById(R.id.ViewPager);
viewPager2.setAdapter(new FragmentPagerAdapter(this));

TabLayout tabLayout = findViewById(R.id.tabLayout);
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(
tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {

@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {

switch (position) {
case 0: {
tab.setText("Fragment 01");
break;
}
default: {
tab.setText("Fragment 02");
break;
}
}
}
});

tabLayoutMediator.attach();
}
}

// FragmentPagerAdapter.java

package Zoomie.App;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;

public class FragmentPagerAdapter extends FragmentStateAdapter {

public FragmentPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}

@NonNull
@Override
public Fragment createFragment(int position) {
switch (position){
case 0:
return new Fragment01();
default:
return new Fragment02();
}
}

@Override
public int getItemCount() {
return 2;
}
}

// Fragment02.java 

package Zoomie.App;

import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;

public class Fragment02 extends Fragment {

public Fragment02() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView=inflater.inflate(R.layout.fragment_02, container, false);

TextView fade01 = (TextView) rootView.findViewById(R.id.textView_fade_01);
Animation fade = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_animation);
fade01.startAnimation(fade);

return rootView;
}
}

// fade_animation.xml

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

<set xmlns:android="http://schemas.android.com/apk/res/android">

<alpha
android:fromAlpha="0"
android:toAlpha=".5"
android:duration="375"
android:repeatMode="reverse"
android:repeatCount="infinite"
/>

</set>

最佳答案

您应该将加载动画方法移至 onResume() 生命周期方法中。对于您的情况:

private TextView fade01;

@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState
) {

View rootView = inflater.inflate(R.layout.fragment_02, container, false);

fade01 = (TextView) rootView.findViewById(R.id.textView_fade_01);

return rootView;
}

@Override
public void onResume() {
super.onResume();
Animation fade = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_animation);
fade01.startAnimation(fade);
}

关于java - 在 fragment 状态适配器内的 fragment 之间滑动时,动画(textView)不断取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60196379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com