gpt4 book ai didi

android - 自定义属性动画不适用于禁用动画

转载 作者:太空狗 更新时间:2023-10-29 14:00:45 24 4
gpt4 key购买 nike

我正在创建一个 android 应用程序,其中每个 fragment 都绑定(bind)到自定义的从左到右的幻灯片动画。我使用 Custom Property Animation(下面给出的 FractionLinearLayout.java 类)实现了这一点。我的应用程序有几个 Fragment,在这些 fragment 之间切换之后是从右到左的滑动动画。一切正常,直到我出于测试目的从开发人员选项中禁用动画。

当我禁用动画时没有任何显示。我可以看到 logcats 意味着应用程序运行完美,只是 View 没有被加载,(可能)因为自定义属性 FractionTranslationXFractionTranslationY

有人遇到过这个问题吗?提前致谢。

FractionLinearLayout.java: 自定义动画类

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();
}
}

fragment 布局文件:

fragment_main_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<com.bbi.views.FractionLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/esc_app_background"
android:orientation="vertical">
...........
...........
</com.bbi.views.FractionLinearLayout>

自定义动画 xml 文件:

alide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/animation_time"
android:propertyName="fractionTranslationX"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType" />

</set>

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/animation_time"
android:propertyName="fractionTranslationX"
android:valueFrom="0"
android:valueTo="-1"
android:valueType="floatType" />

</set>

在 Activity 上添加 fragment 的代码:

getFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.slide_in_left;, R.anim.slide_out_left)
.replace(R.id.frameTopContainer, newsToolFragment)
.commitAllowingStateLoss();

当我在 fragment_main_layout.xml 中将 com.views.FractionLinearLayout 替换为 LinearLayout 时,一切正常(不是动画 很明显,因为我禁用了动画并删除了属性自定义动画)。

最佳答案

最终通过阅读 animation_scale 标志并根据该标志删除 setCustomAnimations() 方法解决了我的问题。

关于android - 自定义属性动画不适用于禁用动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35696868/

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