【问题标题】:Making a view fill the area after rotation旋转后使视图填充区域
【发布时间】:2018-01-22 00:44:57
【问题描述】:
【问题讨论】:
标签:
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;
}
与您的情况不完全相同,但这应该会有所帮助。
请注意,在我的情况下,设备无法自行处理旋转。