旋转后使视图填充区域

时间:2018-01-21 16:27:51

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

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

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

有没有办法让这个工作?

当手机未旋转时,视图效果很好: Screenshot with no rotation

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

任何帮助都将深受赞赏。

1 个答案:

答案 0 :(得分:0)

您必须将framelayout与您的视图一起使用。旋转后,您应该在framelayout中重新创建视图。我用这样的片段做到了:

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;
    }

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