Я столкнулся с проблемой во время чтения Animation scale duration
Флаг в Зефир. Тот же код работает в более ранней версии Marshmallow (6.0.0).Как читать Флаг продолжительности анимации в Зефире
Я использую метод анимации фрагментов android.app.Fragment.setCustomTransition()
. Когда продолжительность анимации равна 0 в developer option settings
, фрагменты не отображаются. Поэтому мне пришлось отключить анимацию над этим условием.
Мой фрагмент кода:
public static boolean isAnimationOff()
{
final float animatorSpeed;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
{
animatorSpeed = Settings.Global.getFloat(
context.getContentResolver(),
Settings.Global.ANIMATOR_DURATION_SCALE,
0);
}
else
{
animatorSpeed = Settings.System.getFloat(
context.getContentResolver(),
Settings.System.ANIMATOR_DURATION_SCALE,
0);
}
return animatorSpeed == 0;
}
Проблема заключается в том: этот код возвращается true
на каждом Invoke, даже если продолжительность анимации масштаб не равен 0.
Кто-нибудь сталкивался с этой проблемы?
Edit1
Ниже приведен фрагмент кода, где я использую isAnimationOff()
метод для загрузки фрагмента:
private void loadFragment(Fragment fragment)
{
FragmentTransaction transaction = getFragmentManager().beginTransaction();
if (!Constants.isAnimationOff())
transaction.setCustomAnimations(animSlideIn, animSlideOut);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).replace(R.id.frameTopContainer, fragment)
.commitAllowingStateLoss();
}
edit2
Вот обычай LinearLayout, который имеет настраиваемое свойство:
public class FractionLinearLayout extends LinearLayout
{
DisplayMetrics matrics = getContext().getResources().getDisplayMetrics();
public FractionLinearLayout(Context context, AttributeSet attrs,
int defStyleAttr)
{
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
}
public FractionLinearLayout(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
public FractionLinearLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
}
public float getFractionTranslationX()
{
return getWidth() > 0 ? super.getTranslationX()/getWidth() : Float.MAX_VALUE;
}
public void setFractionTranslationX(float translationX)
{
int width = getWidth();
super.setTranslationX(width > 0 ? width * translationX : Float.MAX_VALUE);
}
public float getFractionTranslationY()
{
return getHeight() > 0 ? super.getTranslationX()/getHeight() : Float.MAX_VALUE;
}
public void setFractionTranslationY(float translationY)
{
int height = getHeight();
super.setTranslationY(height > 0 ? height * translationY : Float.MAX_VALUE);
}
public float getAnimWidth()
{
return getLayoutParams().width;
}
public void setAnimWidth(int animWidth)
{
getLayoutParams().width = animWidth;
requestLayout();
}
}
что на самом деле вам нужен метод isAnimationOff для? – pskink
Я проверяю, если масштаб анимации равен 0 (анимация отключена от настроек опций разработчика). если не вызывается 'setCustomTransition()' else, а не вызывается. – chandil03
@pskink любая удача. – chandil03