4

我有一个垂直的线性布局,在线性布局中有三个可点击的图像视图。当我使用简单的动画将线性布局旋转 90 度时,问题就出现了。图像视图已正确旋转,但图像视图的 onclick 事件不会与线性布局一起旋转,并且与动画之前一样保持在原始位置。

下面是我的主要java代码

       westplayer = (LinearLayout) findViewById(R.id.linearLayout_west);

        // Create an animation instance
    Animation an = new RotateAnimation(0.0f, 180.0f, 32, 180);

    // Set the animation's parameters
    an.setDuration(0);               // duration in ms
    an.setRepeatCount(0);                // -1 = infinite repeated
    an.setRepeatMode(Animation.REVERSE); // reverses each repeat
    an.setFillAfter(true);               // keep rotation after animation 

        // Apply animation to linearlayout
    westplayer.setAnimation(an); 

上面的代码处理动画部分。下面的代码跟随动画并且应该更新布局位置,但对我不起作用。

        // Update Layout 
          int top=westplayer.getTop();
      int bottom=westplayer.getBottom();
      int left=westplayer.getLeft();
      int right=westplayer.getRight();
      westplayer.layout(left, top , right, bottom );

xml如下:

     <LinearLayout
    android:id="@+id/linearLayout_west"
    android:layout_width="42dp"
    android:layout_height="250dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/linearLayout_north"
    android:duplicateParentState="false"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageViewW1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/spades_14"

         />

    <ImageView
        android:id="@+id/imageViewW2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/spades_14"
        android:layout_marginTop="-15dp" 
        />

    <ImageView
        android:id="@+id/imageViewW3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/spades_14"
        android:layout_marginTop="-15dp" 
       />

</LinearLayout>

我从中获得了更新布局代码还找到了另一个解决方案,我也尝试过这个,但仍然没有积极的结果。我需要这个为API 10工作。任何帮助深表感谢

4

2 回答 2

0

是的,你得到了预期的结果。

由于android中的动画只尝试在视图的位图上应用一个变换矩阵,它不会改变视图的位置和大小。

所以在你的动画之后,虽然你setFillAfter(true)让视图看起来旋转了,但实际上视图仍然在同一个地方,一点也不移动。

于 2013-09-04T05:26:15.667 回答
0

您面临的问题是因为您使用了补间动画。视图将旋转,只有可见部分会移动。但是 ImageView 的位置将保持与布局中定义的相同。这就是可点击区域保持不变的原因。

要重新定义位置,根据动画,您必须使用Property Animation,例如 aObjectAnimator或 a ValueAnimator。这样,在 xml 中定义的属性将被更新。现在可点击区域随着视图移动。

于 2013-09-16T12:50:32.537 回答