我正在尝试将WaveView library与陀螺仪值结合使用,以便在旋转手机时获得水流效果。 图书馆只是一个我理想情况下能够控制的视图
唯一的问题是,当WaveView旋转时,它不会扩展它的高度和宽度来填充侧面生成的空白区域。 即使我已将match_parent作为宽度,也会发生这种情况。
有没有办法让这个工作?
当手机未旋转时,视图效果很好: Screenshot with no rotation
但是当设备和视图旋转时,它看起来像这样,没有视图填充左侧和底部留下的额外空白区域: Screenshot with rotation
任何帮助都将深受赞赏。
答案 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;
}
与你的情况不完全相同,但这应该有所帮助。 请注意,在我的情况下,设备无法自行处理旋转。