android横屏imageview大小不变的问题

July4th 发布于 2014/03/06 10:58
阅读 1K+
收藏 0

大家好:

我有个问题:就是横屏之后有的手机只有第一帧是充满layout,之后的就不行了,不知为什么?

环境:android开发 ,真机调试,

要求:视频支持横竖屏的切换。

//新建一个 layout,并布局。

m_iVideoLayout = new AbsoluteLayout(this.getContext());
        m_iVideoBaseLayout.addView(m_iVideoLayout, new AbsoluteLayout.LayoutParams(iVideoImageWidth, iVideoImageHeigt, 0, (iVideoAreaHeight-iVideoImageHeigt)/2 + iTitleAreaHeight ));

//新建一个imageview,并布局

m_iImageView = new ImageView(this.getContext());
        m_iVideoLayout.addView(m_iImageView, new AbsoluteLayout.LayoutParams(m_iVideoLayout.getLayoutParams()));

//实现重力感应监听器 ,监听横竖屏

private void sensorListener(){
        
        // 得到当前手机传感器管理对象
        sensorMgr = (SensorManager) this.GetActivity().getSystemService(this.getContext().SENSOR_SERVICE);
        sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        lsn = new SensorEventListener() {
            public void onSensorChanged(SensorEvent e) {
                sensorx = e.values[SensorManager.DATA_X];
                sensory = e.values[SensorManager.DATA_Y];
                sensorz = e.values[SensorManager.DATA_Z];
                // 在标题处显示出来
                RotatingResponse(sensorx);
            }

            public void onAccuracyChanged(Sensor s, int accuracy) {
            }

            
        };
        sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_UI);
        
    }
    
    //监听到x的值后,响应
    //set the layout rotating
    private void RotatingResponse(float sensorx2){
        //m_iVideoBaseLayout
        final float centerX = m_iVideoLayout.getWidth() / 2.0f;
        final float centerY = m_iVideoLayout.getHeight() / 2.0f;
        RotateAnimation rotateAnimation = new RotateAnimation(0, 90, centerX,
          centerY);
        rotateAnimation.setDuration(0);
        rotateAnimation.setFillAfter(true);
        int width = iVideoAreaWidth;
        int height = iVideoAreaHeight;
        int x = 0;
        int y = 0;
        if(width*4/3 > height){//这是长宽比:4:3
            height = iVideoAreaHeight;
            width = iVideoAreaHeight*3/4;
            x = (iVideoAreaWidth - width)/2;
        }else{
            width = iVideoAreaWidth;
            height = width*4/3;
            y = (iVideoAreaHeight - height)/2;
        
        }
        if(sensorx2 > 6.0 && rotNumber == 0){
            rotNumber = 1;//横竖屏的flag
            AbsoluteLayout.LayoutParams params = (LayoutParams) m_iVideoLayout.getLayoutParams();
            params.width = height;
            params.height = width;
            params.y = GlobalDefine.GetYScale(78)+y;
            params.x = x;
            m_iVideoLayout.setLayoutParams(params);//重新对layout布局
            m_iVideoLayout.startAnimation(rotateAnimation);//layout转90度
        }else if(sensorx2 < 4.0 && rotNumber == 1){
            rotNumber = 0;
            AbsoluteLayout.LayoutParams params = (LayoutParams) m_iVideoLayout.getLayoutParams();
            params.width = iVideoAreaWidth;
            params.height = iVideoAreaWidth;
            params.y = (iVideoAreaHeight-iVideoImageHeigt)/2 +  GlobalDefine.GetYScale(78);
            params.x = 0;
            m_iVideoLayout.setLayoutParams(params);
            m_iVideoLayout.startAnimation(new RotateAnimation(0, 0,centerX,centerY));
        }    
    }

小米 1s测试:手机横屏后第一帧,是要求的大小,但是后来就不行了,还是竖屏的大小,仅仅转了90度。

小米2s测试:一切正常横屏之后就是 想要的4:3比例(竖屏1:1)

谢谢先啊!


加载中
0
彭博
彭博

先把代码高亮下...

July4th
July4th
我在下面的评论中跟新了一下。谢谢了
July4th
July4th
现在不能编辑了
0
July4th
July4th

大家好:

我有个问题:就是横屏之后有的手机只有第一帧是充满layout,之后的就不行了,不知为什么?

环境:android开发 ,真机调试,

要求:视频支持横竖屏的切换。

//新建一个 layout,并布局。

m_iVideoLayout = new AbsoluteLayout(this.getContext());
        m_iVideoBaseLayout.addView(m_iVideoLayout, new AbsoluteLayout.LayoutParams(iVideoImageWidth, iVideoImageHeigt, 0, (iVideoAreaHeight-iVideoImageHeigt)/2 + iTitleAreaHeight ));

//新建一个imageview,并布局

m_iImageView = new ImageView(this.getContext());
        m_iVideoLayout.addView(m_iImageView, new AbsoluteLayout.LayoutParams(m_iVideoLayout.getLayoutParams()));

//实现重力感应监听器 ,监听横竖屏

private void sensorListener(){
        
        // 得到当前手机传感器管理对象
        sensorMgr = (SensorManager) this.GetActivity().getSystemService(this.getContext().SENSOR_SERVICE);
        sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        lsn = new SensorEventListener() {
            public void onSensorChanged(SensorEvent e) {
                sensorx = e.values[SensorManager.DATA_X];
                sensory = e.values[SensorManager.DATA_Y];
                sensorz = e.values[SensorManager.DATA_Z];
                // 在标题处显示出来
                RotatingResponse(sensorx);
            }

            public void onAccuracyChanged(Sensor s, int accuracy) {
            }

            
        };
        sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_UI);
        
    }
    
    //监听到x的值后,响应
    //set the layout rotating
    private void RotatingResponse(float sensorx2){
        //m_iVideoBaseLayout
        final float centerX = m_iVideoLayout.getWidth() / 2.0f;
        final float centerY = m_iVideoLayout.getHeight() / 2.0f;
        RotateAnimation rotateAnimation = new RotateAnimation(0, 90, centerX,
          centerY);
        rotateAnimation.setDuration(0);
        rotateAnimation.setFillAfter(true);
        int width = iVideoAreaWidth;
        int height = iVideoAreaHeight;
        int x = 0;
        int y = 0;
        if(width*4/3 > height){//这是长宽比:4:3
            height = iVideoAreaHeight;
            width = iVideoAreaHeight*3/4;
            x = (iVideoAreaWidth - width)/2;
        }else{
            width = iVideoAreaWidth;
            height = width*4/3;
            y = (iVideoAreaHeight - height)/2;
        
        }
        if(sensorx2 > 6.0 && rotNumber == 0){
            rotNumber = 1;//横竖屏的flag
            AbsoluteLayout.LayoutParams params = (LayoutParams) m_iVideoLayout.getLayoutParams();
            params.width = height;
            params.height = width;
            params.y = GlobalDefine.GetYScale(78)+y;
            params.x = x;
            m_iVideoLayout.setLayoutParams(params);//重新对layout布局
            m_iVideoLayout.startAnimation(rotateAnimation);//layout转90度
        }else if(sensorx2 < 4.0 && rotNumber == 1){
            rotNumber = 0;
            AbsoluteLayout.LayoutParams params = (LayoutParams) m_iVideoLayout.getLayoutParams();
            params.width = iVideoAreaWidth;
            params.height = iVideoAreaWidth;
            params.y = (iVideoAreaHeight-iVideoImageHeigt)/2 +  GlobalDefine.GetYScale(78);
            params.x = 0;
            m_iVideoLayout.setLayoutParams(params);
            m_iVideoLayout.startAnimation(new RotateAnimation(0, 0,centerX,centerY));
        }    
    }

小米 1s测试:手机横屏后第一帧,是要求的大小,但是后来就不行了,还是竖屏的大小,仅仅转了90度。

小米2s测试:一切正常横屏之后就是 想要的4:3比例(竖屏1:1)

谢谢先啊!


返回顶部
顶部