【问题标题】:Making a view fill the area after rotation旋转后使视图填充区域
【发布时间】:2018-01-22 00:44:57
【问题描述】:

我正在尝试将WaveView library 与陀螺仪值结合使用,以便在旋转手机时获得流水效果。 图书馆只是一个我应该能够控制的视图

唯一的问题是,当 WaveView 旋转时,它不会扩展它的高度和宽度来填充侧面生成的空白区域。 即使我将 match_parent 作为宽度,也会发生这种情况。

有没有办法让它工作?

手机未旋转时,视图完美运行: Screenshot with no rotation

但是当设备和视图旋转时,它看起来像这样,视图没有填充侧面和底部留下的额外空白: Screenshot with rotation

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-animation android-view android-orientation


    【解决方案1】:

    您必须使用带有您的视图的框架布局。旋转后,您应该在框架布局中重新创建视图。我用这样的片段做到了:

    FrameLayout mFragmentHolder = createFragmentHolder(angle);
                mMainLayout.removeAllViews();
                mMainLayout.addView(mFragmentHolder);
                FragmentManager fm = getFragmentManager();
                mFragMain = new FragmentMain();
                FragmentTransaction ft = fm.beginTransaction();
                ft.add(mFragmentHolder.getId(), mFragMain);
                ft.commitAllowingStateLoss();
    

    这是 createVieholder 方法:

    private FrameLayout createFragmentHolder(int angle) {
    
            FrameLayout layout = new FrameLayout(this);
            layout.setId(R.id.container);
    
            Point p = new Point();
            getWindowManager().getDefaultDisplay().getRealSize(p);
    
            int h = p.y;
            int w = p.x;
    
            LogUtil.d("size: " + h + " " + w);
            float delta = Math.abs(w - h);
            delta = delta / 2;
            FrameLayout.LayoutParams params = null;
            layout.setRotation(angle);
            if (angle == 0) {
    
                params = new FrameLayout.LayoutParams(w, h);
            } else if (angle == 90) {
    
                params = new FrameLayout.LayoutParams(h, w);
                layout.setPivotX((h / 2) + delta); // org +delta
                layout.setPivotY((w / 2));//+ delta
            } else if (angle == 180) {
                params = new FrameLayout.LayoutParams(w, h);
            } else if (angle == 270) {
                params = new FrameLayout.LayoutParams(h, w);
                layout.setPivotX((h / 2)); // org +delta
                layout.setPivotY((w / 2) - delta);//+ delta
            }
            layout.setLayoutParams(params);
            LogUtil.d("created view");
            return layout;
        }
    

    与您的情况不完全相同,但这应该会有所帮助。 请注意,在我的情况下,设备无法自行处理旋转。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多