g_senser frameworks 层转屏数据流程

一、调用流程:
 
 
 
1、\frameworks\base\core\java\android\view\WindowOrientationListener.java
 
     onSensorChanged    -- >    calculateNewRotation
 
    calculateNewRotation -- >  onOrientationChanged 
 
 
2、\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
 
     onOrientationChanged  --> setRotation
 
 
3、\frameworks\base\services\java\com\android\server\WindowManagerService.java 中
 
    setRotation -->  setRotationUncheckedLocked
 
    public boolean setRotationUncheckedLocked(int rotation, int animFlags)   // 函数用来最终设置屏方向。
 
 
二、 calculateNewRotation()函数
 
     private void calculateNewRotation(float orientation, float tiltAngle)
    {
            if (localLOGV) Log.i(TAG, orientation + ", " + tiltAngle + ", " + mRotation);
   
        //   final boolean allow180Rotation = mAllow180Rotation;  
             final boolean allow180Rotation = true;  

             int thresholdRanges[][] = allow180Rotation ? THRESHOLDS_WITH_180[mRotation] : THRESHOLDS[mRotation];
              //判断支持哪种旋转模式  THRESHOLDS_WITH_180 或 THRESHOLDS
             int row = -1;
   
             for (int i = 0; i < thresholdRanges.length; i++)
            {
                 if (orientation >= thresholdRanges[i][0] && orientation < thresholdRanges[i][1])
                {     //判断旋转地范围
                     row = i;
                     break;
                 }
             }
             if (row == -1) return; // no matching transition
 
              int rotation = allow180Rotation ? ROTATE_TO_WITH_180[mRotation][row] : ROTATE_TO[mRotation][row]; 
                 //根据mRotation、row判断旋转方向,也就是要转向的那个方向
                 //此时mRotation对应你当前屏幕方向, rotation 是你马上要转向的那个方向
   
             if (tiltAngle > MAX_TRANSITION_TILT[rotation])
             {
                 // tilted too far flat to go to this rotation
                 return;
             }

            if (localLOGV) Log.i(TAG, "orientation " + orientation + " gives new rotation = " + rotation);

            mRotation = rotation;
             //此时 mRotation 对应你要转向的方向了
   
             mOrientationListener.onOrientationChanged(INTERNAL_TO_SURFACE_ROTATION[mRotation]);
             // 将mRotation传递到WindowManagerService.java中做屏幕的旋转
      }
 
    
修改备忘
 
 
        路径:frameworks\base\core\java\android\view\WindowOrientationListener.java
    
        /*default
        private static final int[][] ROTATE_TO_WITH_180 = new int[][] {
            {ROTATION_90, ROTATION_180, ROTATION_270},
            {ROTATION_0, ROTATION_180, ROTATION_90, ROTATION_0},
            {ROTATION_0, ROTATION_270, ROTATION_180, ROTATION_0},
            {ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_0},
        };
        */
 
       private static final int[][] ROTATE_TO_WITH_180 = new int[][] {
            {ROTATION_90, ROTATION_180, ROTATION_270},
            {ROTATION_0, ROTATION_180, ROTATION_270, ROTATION_0},
            {ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_0},
            {ROTATION_0, ROTATION_90, ROTATION_270, ROTATION_0},
        };
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值