Ionic 4电容器中带有本机插件动画的视觉错误

时间:2019-08-12 09:44:33

标签: java android ionic-framework capacitor

我目前正在为Capacitor开发自定义的android native插件。该插件包含一个应用程序的页脚,除了隐藏的动画外,该页脚工作正常。

问题是,每次显示/隐藏页脚时,我都会更改WebView边距,这会在页脚所占据的空间中出现一个黑色(有时是橙色,可能是因为应用程序的主要颜色之一)栏。动画结束后,黑条消失。

我尝试在动画开始/结束时更改WebView边距,结果是相同的。

谢谢大家,这是一些代码。

动画XML:

<translate
    android:duration="150"
    android:fromYDelta="0"
    android:toYDelta="100%" />

WebView边距功能:

private void changeWebViewMargin(float pixels) {
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) wb.getLayoutParams();
    params.setMargins(0, 0, 0, (int) dpTopixel(getContext(), pixels));
    wb.setLayoutParams(params);
    wb.requestLayout();
}

隐藏功能:

@PluginMethod()
public void hide(PluginCall call) {
    Boolean animated = call.getBoolean("animated");

    if (animated == null) {
        animated = false;
    }

    final boolean finalAnimated = animated;

    this.getBridge().getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (finalAnimated && footer.getVisibility() == View.VISIBLE) {
                changeWebViewMargin(0f);
                Animation myAnim = AnimationUtils.loadAnimation(getBridge().getContext(), R.anim.hide_footer);
                myAnim.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        footer_img.setVisibility(View.INVISIBLE);
                        footer.setVisibility(View.INVISIBLE);
                        btn3.setVisibility(View.INVISIBLE);
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                    }
                });
                footer.startAnimation(myAnim);
                footer_img.startAnimation(myAnim);
                btn3.startAnimation(myAnim);
            } else {
                footer_img.setVisibility(View.INVISIBLE);
                footer.setVisibility(View.INVISIBLE);
                btn3.setVisibility(View.INVISIBLE);
                changeWebViewMargin(0f);
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

请尝试使用WindowInsets而不是使用边距:

MOVE