我有一个父RelativeLayout,我想用它来容纳一些项目视图。想象一下,洗牌一堆卡片,看到一堆卡片,彼此略微歪斜,像堆叠一样彼此叠加。我通过迭代集合来实现这一点,展开了一个布局XML文件,它是每个"卡的模板。在将该视图添加到父RelativeLayout之前,设置X,Y和旋转属性,然后使用该项详细信息填充它。
这样可行,但每张卡的宽度和高度与父RelativeLayout相同,因此如果它们不旋转,它们将占用整个父布局。旋转的那些,它们的角落从RelativeLayout的边界消失,你看不到它们。
我想要的是每个子视图的宽度和高度为父亲RelativeLayout的90%,这样随着堆叠视图的旋转,您可以看到下方的角落出来了两侧。我不知道怎么做。
这是父亲RelativeLayout
<RelativeLayout
android:id="@+id/layoutview"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_above="@id/tayle_buttons"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="#005500"/>
这是我的片段
的onCreateView()方法View rootView = inflater.inflate(R.layout.fragment_tayleresults, container, false);
windowwidth = m_windowManager.getDefaultDisplay().getWidth();
screenCenter = windowwidth / 2;
parentView = (RelativeLayout) rootView.findViewById(R.id.layoutview);
这是填充每个子视图的代码(删除了不必要的代码)
final View m_view = inflater.inflate(R.layout.fragment_tayle, null);
RelativeLayout m_topLayout = (RelativeLayout) m_view.findViewById(R.id.t_layout);
//Populate the View control values, eg TextViews, ImageViews here
m_view.setX(0);
m_view.setY(0);
m_view.setTag(i);
if (i == 0) { m_view.setRotation(0); }
else if (i == 1) { m_view.setRotation(-5); }
else if (i == 2) { m_view.setRotation(3); }
else if (i == 3) { m_view.setRotation(7); }
else if (i == 4) { m_view.setRotation(-2); }
else if (i == 5) { m_view.setRotation(5); }
parentView.addView(m_view);
最后,每个&#34;卡&#34;
的子布局<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/t_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dip"
android:weightSum="2"
android:background="@drawable/tayle_border"
>
<ImageView
android:id="@+id/genre"
android:layout_height="60dp"
android:layout_width="50dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true" />
...and so on
答案 0 :(得分:0)
要了解父级的宽度和高度,您可以实现视图树观察器。此代码是here的修改后的代码段:
ViewTreeObserver viewTreeObserver = relativeLayout.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
viewWidth = relativeLayout.getWidth();
viewHeight = relativeLayout.getHeight();
}
});
}
现在您拥有视图的宽度和高度(以像素为单位)。您现在可以相应地缩放imageview。这里 relativeLayout.getWidth()返回像素,但是在 layout-pass 之前或期间调用将返回0. Viewtreeobserver用于缓解它。