使用按钮旋转相对布局 - 触摸事件区域不会旋转

时间:2014-08-21 12:51:33

标签: android android-layout android-animation

我想像这样轮换RelativeLayout

由此:

enter image description here

对此:

enter image description here

到目前为止我已经尝试了:

<?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"   
            android:toDegrees="90"
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="500"
            android:fillAfter="true"
            android:interpolator="@android:anim/linear_interpolator">
    </rotate>

这是我的.java文件:

RotateAnimation rotateAnim = (RotateAnimation)AnimationUtils.loadAnimation(this, R.anim.rotate);
RelativeLayout layout = (RelativeLayout)findViewById(R.id.buttonLayout);
layout.startAnimation(rotateAnim);

这实际上是旋转我的按钮布局但按钮触摸区域不旋转。 我的意思是按钮视图看起来真的像90度旋转,但触摸区域保持不变。

建议? 我的方式(没有LayoutAnimationController)是否正常?

提前10倍!

3 个答案:

答案 0 :(得分:1)

只是为了澄清上面的答案,在android中有两种动画,视图动画和属性动画,第一种 - 动画视图而不改变视图本身,这意味着在它结束后你必须设置视图的方式你想要他们。 后者 - 在动画制作时更改视图属性本身(宽度,高度,X,Y等...)。

在你的情况下,后者是正确的选择。

此外,属性动画具有更好的性能(它使用vsync),因此如果您的应用程序支持ics及以上并且您可以使用它们,那么它将永远是更好的选择。

答案 1 :(得分:0)

在这里,您可以设置视图的表示形式,因此按钮和视图实际上位于完全相同的位置 要移动视图,请使用ViewPropertyAnimator

layout.animate().rotation(90).start();

答案 2 :(得分:0)

RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main);
int w = mainLayout.getWidth();
int h = mainLayout.getHeight();

mainLayout.setRotation(270.0f);
mainLayout.setTranslationX((w - h) / 2);
mainLayout.setTranslationY((h - w) / 2);

ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) mainLayout.getLayoutParams();
lp.height = w;
lp.width = h;
mainLayout.requestLayout();

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:id="@+id/main"
    android:layout_height="match_parent"
    android:background="#ffcc88"
    tools:context=".TestRotateActivity" >

    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Test"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        />

    <Button 
        android:id="@+id/rotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Rotate"
        android:layout_centerInParent="true"
        />

</RelativeLayout>