在Android中设置rotationX后对齐2个布局

时间:2015-03-22 11:59:12

标签: android xml image-rotation

在我为它们设置旋转后,我在调整两个RelativeLayouts方面遇到了麻烦。我想创建一个类似3D的感觉(带烤箱的燃气灶),如下所示:enter image description here。 基本上我有2个圆角方形,里面有圆形进度条。我用

android:rotationX="20" //top square layout

android:rotationX="-20" //bottom square layout

我遇到两件事情有困难:

  1. 确保顶部和底部方块保持相互连接 设置旋转后。
  2. 始终确保顶部和底部     具有相同的宽度(这也必须在多个设备上工作)
  3. 我目前已经实现了以下目标,因为您可以看到对齐远非完美: enter image description here

    我尝试在布局上设置布局边距,这适用于我自己的设备,但它对所有设备都没有相同的效果。我目前使用

    根据顶部布局的宽度设置底部正方形布局的宽度
    android:layout_alignLeft="@+id/topLayout"
    android:layout_alignRight="@+id/topLayout"
    

    ..但是,旋转后似乎没有办法正确对齐布局。有没有办法在XML中以其他方式实现预期的效果?

    这是布局xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:animateLayoutChanges="true">
    
        <RelativeLayout
            android:id="@+id/topLayout"
            android:rotationX="20"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/rounded_corners"
            android:layout_centerHorizontal="true">
    
            <include layout="@layout/single_kookplaat"
                android:id="@+id/kookplaat1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="10dp"/>
    
            <include layout="@layout/single_kookplaat"
                android:id="@+id/kookplaat2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/kookplaat1"/>
    
            <include layout="@layout/single_kookplaat"
                android:id="@+id/kookplaat3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_below="@+id/kookplaat2"/>
    
            <include layout="@layout/single_kookplaat"
                android:id="@+id/kookplaat4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/kookplaat3"
                android:layout_alignLeft="@+id/kookplaat2"/>
    
        </RelativeLayout>
        <RelativeLayout
            android:id="@+id/bottomLayout"
            android:rotationX="-20"
            android:layout_alignLeft="@+id/topLayout"
            android:layout_alignRight="@+id/topLayout"
    
    
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/rounded_corners"
            android:layout_centerHorizontal="true"
            android:layout_below="@+id/topLayout">
    
            <include layout="@layout/single_kookplaat"
                android:id="@+id/kookplaat5"
                android:layout_centerInParent="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    
        </RelativeLayout>
    
    </RelativeLayout>
    

1 个答案:

答案 0 :(得分:0)

问题在于您没有指定旋转的枢轴位置,因此默认情况下会根据视图的中心进行旋转。

由于您希望顶视图的底部与底部视图的顶部对齐,因此您希望分别为每个视图制作这些锚点。

确保在旋转之前为每个视图设置轴心点。为了做到这一点,您需要知道每个视图的高度。如果您知道顶视图的高度,则可以通过XML实现,如果不知道,则在测量发生后您需要通过代码执行此操作。这是一个例子:

topView.setPivotX(topView.getMeasuredWidth() / 2);
topView.setPivotY(topView.getMeasuredHeight());
topView.setRotationX(20);

bottomView.setPivotX(bottomView.getMeasuredWidth() / 2);
bottomView.setPivotY(0);
bottomView.setRotationX(-20);