После поворота linearlayout события onclick не меняют положение после поворота

У меня есть вертикальный линейный макет с тремя интерактивными изображениями в линейном макете. Когда я поворачиваю линейный макет на 90 градусов, используя простую анимацию, возникает проблема. Изображения поворачиваются правильно, но события onclick для изображений не поворачиваются вместе с linearlayout и остаются в исходном положении, как и до анимации.

Ниже мой основной код 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. Любая помощь высоко ценится


person user2738708    schedule 02.09.2013    source источник
comment
это изображение является дочерним элементом linearlayout?   -  person Nithinlal    schedule 02.09.2013
comment
да, это дочерний элемент linearlayout, я добавил код xml выше.   -  person user2738708    schedule 04.09.2013


Ответы (2)


Да, вы получили ожидаемый результат.

Поскольку анимация в Android пытается применить матрицу преобразования только к растровому изображению, она не меняет положение и размер представления.

Итак, после вашей анимации, хотя вы setFillAfter(true) позволяете виду выглядеть повернутым, но на самом деле вид остается на том же месте и немного не перемещается.

person faylon    schedule 04.09.2013
comment
Спасибо за ответ. Я думал, что код макета обновления переместит представления после анимации, но, похоже, этого не происходит. Итак, как мне заставить представление изображений также вращаться вместе с растровыми изображениями? Любая идея? - person user2738708; 04.09.2013
comment
@user2738708 user2738708 Извините, я действительно не знаю, есть ли способ расположить представление повернутым способом. - person faylon; 04.09.2013
comment
Спасибо за попытку ответить на мой вопрос, если у кого-то еще есть решение, пожалуйста, помогите мне. - person user2738708; 12.09.2013

Проблема, с которой вы сталкиваетесь, заключается в том, что вы используете анимацию Tween. Вид будет вращаться, и будет двигаться только видимая часть. Но позиции ImageView останутся такими же, как указано в макете. Вот почему кликабельная область остается неизменной.

Чтобы переопределить положение, в соответствии с анимацией вам придется использовать Анимация свойств, например ObjectAnimator или ValueAnimator. При этом свойства, определенные в xml, будут обновлены. Теперь кликабельные области перемещаются вместе с представлениями.

person Steve Benett    schedule 16.09.2013
comment
Да ты прав. анимация свойств решила бы мою проблему, но, поскольку я не упоминал ранее, мне нужно, чтобы я работал для API 10, и я думаю, что анимация свойств не поддерживается в API 10. Моя минимальная сборка — пряники 2.3. Спасибо за помощь. - person user2738708; 20.09.2013
comment
Я попробовал приложение nineoldandroid, доступное в Google Play, которое имеет ту же реализацию (предположение, сделанное мной), что и код в предоставленной вами ссылке. Приложение отображает различные тесты анимации, но меня заинтересовала демонстрация viewpropertyanimator. Кнопка в демо должна быть кликабельной после анимации. Я попробовал приложение на устройстве с желейными бобами, и оно работает, но не работает на устройстве с имбирными пряниками. Пожалуйста, подтвердите мою информацию и спасибо за ваш вклад. - person user2738708; 04.10.2013