我想像这样轮换RelativeLayout
:
由此:
对此:
到目前为止我已经尝试了:
<?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
)是否正常?
答案 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>