屏蔽界面抖动问题

1,状态栏抖动的问题大多是界面跳转时动画导致的,所以我们只需要屏蔽系统设置中开发者选项中的绘图中动画特效就可以了

需要用到

public class DeveloperAnimationManager {
public IWindowManager mIWindowManager = null;
private Context mContext = null;

public DeveloperAnimationManager(Context ctx) {
    mContext = ctx;
    mIWindowManager = getIWindowManager();
}

private IWindowManager getIWindowManager() {

// IBinder wmbinder = ServiceManager.getService( “window” );
IWindowManager windowManager = null;
try {
Object object = new Object();
Method getService = Class.forName(“android.os.ServiceManager”).getMethod(“getService”, String.class);
Object obj = getService.invoke(object, new Object[]{new String(“window”)});
// System.out.println(obj.toString());
windowManager = IWindowManager.Stub.asInterface((IBinder) obj);
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
} catch (InvocationTargetException ex) {
ex.printStackTrace();
}
return windowManager;
}

/**
 * 设置动画缩放开关
 * @param which 0:窗口动画缩放 1:过渡动画缩放
 */
public void setAnimationScale(int which, boolean open) {
    try {
        if (mIWindowManager != null) {
            float targetScale;
            /**
             *  0:    关闭动画
             *  0.5:  动画缩放0.5x
             *  1:    动画缩放1x
             *  1.5:  动画缩放1.5x
             *  2:    动画缩放2x
             *  5:    动画缩放5x
             *  10:   动画缩放10x
             */
            if (open) {
                targetScale = 1f;
            } else {
                targetScale = 0f;
            }

            boolean isPermission = isPermissionDone();
            float curScale = mIWindowManager.getAnimationScale(which);
            Logcat.d("which=" + which + ",open=" + open + ",getAnimationScale=" + curScale
                    + ",isPermissionDone=" + isPermission);

            if (!isPermission) {
                return;
            }

            if (targetScale != curScale) {
                mIWindowManager.setAnimationScale(which, targetScale);
            }
        }
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}


private boolean isPermissionDone() {
    boolean reslult = false;
    String permissionName = Manifest.permission.SET_ANIMATION_SCALE;
    String packageName = mContext.getPackageName();
    PackageManager pm = mContext.getPackageManager();
    boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission(permissionName, packageName));
    Logcat.d("isPermissionDone permission=" + permission);
    if (permission) {
        //showToast("有这个权限"); 
        reslult = true;
    }
    return reslult;
}

为了防止无法获取到系统权限,需要在应用AndroidManifest中加入 android:sharedUserId="android.uid.system"这句话才行

然后在应用启动界面的onCreate()方法中加入下面代码就可以了

    //设置界面跳转时,动画效果,屏蔽动画
    DeveloperAnimationManager devAnimManager = new DeveloperAnimationManager(this);
    devAnimManager.setAnimationScale(0,false);
    devAnimManager.setAnimationScale(1,false);

这样就从根本上解决了界面跳转时,界面抖动的问题了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值