避免在自定义视图中进行布局更改动画,这些动画在WindowManager中更新

pro*_*m85 3 animation android view android-windowmanager

我有一个习惯RelativeLayout,我甚至已经设定setLayoutTransition(null);.我将此自定义视图添加到WindowManager中((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).updateViewLayout(this, layoutParams);

我在自定义视图中更改视图并更改了LayoutParamsfor WindowManager和之后的调用updateViewLayout...

我认为,LayoutParams对于WindowManager动画的变化,但我不确定...

如何禁用所有动画?

ste*_*cks 13

这个有点烦人.Android为所有窗口更改设置了动画,并且他们已经设置了标志以将其禁用为私有.您可以使用禁用窗口动画reflection

    WindowManager.LayoutParams wp = new WindowManager.LayoutParams();
    String className = "android.view.WindowManager$LayoutParams";
    try {
        Class layoutParamsClass = Class.forName(className);

        Field privateFlags = layoutParamsClass.getField("privateFlags");
        Field noAnim = layoutParamsClass.getField("PRIVATE_FLAG_NO_MOVE_ANIMATION");

        int privateFlagsValue = privateFlags.getInt(wp);
        int noAnimFlag = noAnim.getInt(wp);
        privateFlagsValue |= noAnimFlag;

        privateFlags.setInt(wp, privateFlagsValue);

        // Dynamically do stuff with this class
        // List constructors, fields, methods, etc.

    } catch (ClassNotFoundException e) {
        Logger.l.e(e.toString());
        // Class not found!
    } catch (Exception e) {
        Logger.l.e(e.toString());
        // Unknown exception
    }
Run Code Online (Sandbox Code Playgroud)

现在wp不会为布局更改设置动画.请注意,更改窗口大小时,您可能会看到闪烁.我还没有办法解决这个问题.