LinearLayout onClick在TranslateAnimation之后不起作用

时间:2017-09-19 12:27:31

标签: android android-layout android-animation android-linearlayout

这是我的问题。我有6个LinearLayouts,它们都在centerVerticalcenterHorizontal。现在我希望他们在活动开始时移动到各个角落和侧面。 (在每个角落应该是一个布局,左中心和右中心)。我实现了这个,例如,使用这个TranslateAnimation:

 xbox360animation = new TranslateAnimation(0.0f, distanceWidth,
            0.0f, 0.0f);
    xbox360animation.setDuration(1500);
    xbox360animation.setFillAfter(true);
    xbox360Layout.startAnimation(xbox360animation);

    animationxboxone = new TranslateAnimation(0.0f, -distanceWidth,
            0.0f, 0.0f);
    animationxboxone.setDuration(1500);
    animationxboxone.setFillAfter(true);
    xboxOneLayout.startAnimation(animationxboxone);

    animationps3 = new TranslateAnimation(0.0f, distanceWidth,
            0.0f, -distanceHeight);
    animationps3.setDuration(1500);
    animationps3.setFillAfter(true);
    ps3Layout.startAnimation(animationps3);

    animationps4 = new TranslateAnimation(0.0f, -distanceWidth,
            0.0f, -distanceHeight);
    animationps4.setDuration(1500);
    animationps4.setFillAfter(true);
    ps4layout.startAnimation(animationps4);

    animationwiiu = new TranslateAnimation(0.0f, distanceWidth,
            0.0f, distanceHeight);
    animationwiiu.setDuration(1500);
    animationwiiu.setFillAfter(true);
    wiiuLayout.startAnimation(animationwiiu);

    animationpc = new TranslateAnimation(0.0f, -distanceWidth, 0.0f, distanceHeight);
    animationpc.setDuration(1500);
    animationpc.setFillAfter(true);
    pcLayout.startAnimation(animationpc);

我的XML文件:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_below="@id/header"
    android:layout_above="@id/nextBtn"
    android:layout_marginLeft="36dp"
    android:layout_marginTop="16dp"
    android:layout_marginBottom="16dp"
    android:layout_marginRight="36dp"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:id="@+id/xboxOneLayout"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/xboxOne"
            android:padding="10dp"
            android:duplicateParentState="true"
            android:background="@drawable/icon_background_not_selected"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/xbox"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Xbox One"
            android:id="@+id/xboxOnetv"
            android:visibility="invisible"
            android:duplicateParentState="true"
            android:textColor="#fff"
            android:layout_marginTop="5dp"
            android:layout_gravity="center_horizontal"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:id="@+id/xbox360Layout"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/xbox360"
            android:padding="10dp"
            android:duplicateParentState="true"
            android:background="@drawable/icon_background_not_selected"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/xbox"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Xbox 360"
            android:id="@+id/xbox360tv"
            android:textColor="#fff"
            android:duplicateParentState="true"
            android:visibility="invisible"
            android:layout_marginTop="5dp"
            android:layout_gravity="center_horizontal"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:id="@+id/ps3Layout"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/ps3"
            android:padding="10dp"
            android:duplicateParentState="true"
            android:background="@drawable/icon_background_not_selected"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/playstation"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ps3"
            android:duplicateParentState="true"
            android:id="@+id/ps3tv"
            android:textColor="#fff"
            android:visibility="invisible"
            android:layout_marginTop="5dp"
            android:layout_gravity="center_horizontal"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:id="@+id/ps4Layout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/ps4"
            android:duplicateParentState="true"
            android:padding="10dp"
            android:background="@drawable/icon_background_not_selected"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/playstation"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Ps4"
            android:duplicateParentState="true"
            android:id="@+id/ps4tv"
            android:textColor="#fff"
            android:visibility="invisible"
            android:layout_marginTop="5dp"
            android:layout_gravity="center_horizontal"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:id="@+id/wiiuLayout"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/wiiu"
            android:duplicateParentState="true"
            android:padding="10dp"
            android:background="@drawable/icon_background_not_selected"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/wii"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="WiiU"
            android:duplicateParentState="true"
            android:id="@+id/wiiutv"
            android:visibility="invisible"
            android:textColor="#fff"
            android:layout_marginTop="5dp"
            android:layout_gravity="center_horizontal"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:id="@+id/pcLayout"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/pc"
            android:duplicateParentState="true"
            android:padding="10dp"
            android:background="@drawable/icon_background_not_selected"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/desktop"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="PC"
            android:duplicateParentState="true"
            android:textColor="#fff"
            android:id="@+id/pctv"
            android:visibility="invisible"
            android:layout_marginTop="5dp"
            android:layout_gravity="center_horizontal"/>

    </LinearLayout>

</RelativeLayout>

动画后我无法点击它们。当我在动画之前单击它应该位于的位置时,我会在其中一个布局上单击该按钮。 如何将布局设置为新位置,以便从正确的布局中接收onClick事件?

2 个答案:

答案 0 :(得分:2)

这里我向您展示Code中的Gesture Listener示例我使用图像View但您可以将其更改为Linear Layout

public class MainActivity extends Activity {
   private ImageView iv;
   private Matrix matrix = new Matrix();
   private float scale = 1f;
   private ScaleGestureDetector SGD;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      iv=(ImageView)findViewById(R.id.imageView);
      SGD = new ScaleGestureDetector(this,new ScaleListener());
   }

   public boolean onTouchEvent(MotionEvent ev) {
      SGD.onTouchEvent(ev);
      return true;
   }

   private class ScaleListener extends ScaleGestureDetector.
      SimpleOnScaleGestureListener {

      @Override
      public boolean onScale(ScaleGestureDetector detector) {
         scale *= detector.getScaleFactor();
         scale = Math.max(0.1f, Math.min(scale, 5.0f));
         matrix.setScale(scale, scale);
         iv.setImageMatrix(matrix);
         return true;
      }
   }
}

答案 1 :(得分:0)

TranslateAnimation仅移动屏幕上的像素,并不会真正移动LinearLayouts,它只会让它看起来像是在移动,因此OnClickListener不会使用它进行动画处理。你仍然可以在动画之前点击旧位置。

尝试ObjectAnimatorViewPropertyAnimator

适用于xbox 360布局的ViewPropertyAnimator示例:

xbox360Layout.animate().translationX(distanceWidth).setDuration(1500);   

现在你的布局确实在屏幕上移动,你的OnClick应该在新位置上工作。