Перемещение изображения через linearlayout

Я разрабатываю приложение для Android 2.2.

Я хочу переместить изображение из левой части экрана в правую часть экрана.

Как я могу это сделать? Я читал, что мне нужно добавить это изображение в ListView или GridView, чтобы настроить эту анимацию.

ОБНОВЛЕНИЕ

Я создал следующие файлы:

anim/translate_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <translate
        android:fromXDelta="-100%p"
        android:toXDelta="0"
        android:duration="5000" />
</set>

anim/ship_layout_controller

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
        android:delay="10%"
        android:animationOrder="reverse"
        android:animation="@anim/translate_right" />

макет/стартовая страница

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TextView 
        android:id="@+id/appNameTextView"
        android:text="@string/app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="40px"/>
    <Button
        android:id="@+id/PlayButton"
        android:text="@string/play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="40px"/>
    <AbsoluteLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <ImageView
            android:id="@+id/greekShip"
            android:persistentDrawingCache="animation|scrolling"
            android:layoutAnimation="@anim/ship_layout_controller"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/greekship"
            android:maxWidth="176px"
            android:maxHeight="87px"
            android:layout_x="-300px"/>
    </AbsoluteLayout>
</LinearLayout>

StartActivity.java

public class StartActivity extends Activity {

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

    @Override
    protected void onResume() {
        super.onResume();
        ImageView ship = (ImageView)findViewById(R.id.greekShip);

        ship.startAnimation(AnimationUtils.loadAnimation(this, R.anim.translate_right));
    }
}

Но это не работает.


person VansFannel    schedule 20.02.2011    source источник
comment
Я читал, что мне нужно добавить это изображение в ListView или GridView, чтобы настроить эту анимацию. вы неправильно это поняли. Эм... вы смотрели примеры анимации в SDK?   -  person Cristian    schedule 20.02.2011
comment
Перемещение означает анимацию? Если это так, вы можете взглянуть на класс Animation (простая анимация Translate должна сделать это). Если вы просто хотите, чтобы он был выровнен по правому краю, установите Layout Gravity вправо.   -  person Zarah    schedule 20.02.2011
comment
@Cristian: я читаю книгу Apress Pro Android 2, и там говорится об этом.   -  person VansFannel    schedule 20.02.2011
comment
@Zarah: Да, я хочу анимировать парус слева направо.   -  person VansFannel    schedule 20.02.2011
comment
@VansFannel: Хорошо, позвольте мне объяснить это по порядку: вам не нужны ни ListView, ни GridView для создания этой анимации. Итак, вы неправильно поняли это или книга неверна (что, я думаю, невозможно).   -  person Cristian    schedule 20.02.2011
comment
@Cristian: я читал это: «Анимация макета почти так же проста». Вы будете использовать анимацию макета с ListView и GridView, которые являются двумя наиболее часто используемыми элементами управления в Android». на стр. 224. Может быть, я не понял.   -  person VansFannel    schedule 20.02.2011
comment
Ага... в основном это означает, что и ListView, и GridView используют и могут быть настроены для использования анимаций. Но это не означает, что вы должны использовать их для анимации представления; Я постараюсь ответить на этот вопрос в ближайшее время... Сейчас у меня нет времени. Прости.   -  person Cristian    schedule 20.02.2011
comment
Я обновил свой вопрос с неработающим решением.   -  person VansFannel    schedule 22.02.2011
comment
Вам не нужно включать ImageView в AbsoluteLayout. Думаю, вам не обязательно иметь файл layoutAnimation. Я пробовал, тестировал и использовал свое решение ниже, и оно отлично работает. Может, попробуй какое-то время не усложнять.   -  person Zarah    schedule 23.02.2011


Ответы (4)


Взгляните на класс Animation, в частности на Tween Animation, точнее Перевести элемент. Создайте файл анимации в своем проекте, затем примените эту анимацию к своему изображению. Например, эта анимация переместит объект из центра экрана вправо.

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:toXDelta="100%p"
    android:fromXDelta="0%"
    android:duration="300" 
    android:fillEnabled="true" 
    android:fillAfter="true">
</translate>

EDIT: чтобы применить эту анимацию к кнопке, TextView, ImageView и т. д.

ImageView imageView = (ImageView) findViewById(R.id.myImageView);
Animation exitAnimation = AnimationUtils.loadAnimation(this, R.anim.exit_animation);
imageView.startAnimation(exitAnimation);
person Zarah    schedule 21.02.2011
comment
Я читал, что анимация движения предназначена для элементов внутри вида, чтобы не перемещать весь вид. - person VansFannel; 21.02.2011
comment
Вы хоть пробовали? В конце концов, изображение ЯВЛЯЕТСЯ представлением. - person Zarah; 21.02.2011
comment
Я хочу переместить ImageView, а не изображение внутри imageView. - person VansFannel; 21.02.2011
comment
Анимации Tweened Анимации Tweened применяются к представлениям, позволяя определить ряд изменений положения, размера, поворота и непрозрачности, которые анимируют содержимое представления. - person VansFannel; 21.02.2011
comment
ТОЧНО. Это то, чего ты хочешь, верно? Опять же, вы пробовали, если это работает? - person Zarah; 21.02.2011
comment
Нет, я хочу переместить весь ImageView. - person VansFannel; 21.02.2011
comment
Поэтому примените анимацию к ImageView. Проверьте мое редактирование в моем ответе. Если это все еще не то, что вы хотите, то я в полном замешательстве. - person Zarah; 21.02.2011
comment
Спасибо, друг, я реализовал твой код. Это работает. И вместо ImageView я использовал LinearLayout, выглядит круто.... - person Tripaty Sahu; 27.09.2011
comment
R.anim вызывает у меня проблемы, показывает ошибку и говорит, что анимация не может быть разрешена - person SSH This; 07.07.2012
comment
@SSHThis: Вы пытались сделать Project › Clean? Убедитесь, что вы используете правильное имя файла для ссылки на R.anim. - person Zarah; 09.07.2012
comment
Спасибо за ответ @Zarah! - person SSH This; 10.07.2012

вы должны использовать Анимацию перевода. Например, эта анимация переместит изображение из левой части экрана в правую.

Анимационная активность

    listener = new AnimationListener() {
        @Override 
        public void onAnimationStart(Animation animation) {}
        @Override 
        public void onAnimationRepeat(Animation animation) {}
        @Override
        public void onAnimationEnd(Animation animation) {
            System.out.println("End Animation!");
            //load_animations();
        }
    };

     }
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v==button)
    {
        moveLefttoRight = new TranslateAnimation(0, 200, 0, 0);
        moveLefttoRight.setDuration(1000);
        moveLefttoRight.setFillAfter(true);
        my_image.startAnimation(moveLefttoRight);
    }
    }

  }

XML-код

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<ImageView 
   android:id="@+id/diceid"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="@drawable/dice"/>

</LinearLayout>

и файл анимация

  <?xml version="1.0" encoding="utf-8"?>
  <rotate
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromDegrees="0"
   android:toDegrees="360"
   android:pivotX="50%"
   android:pivotY="50%"
   android:duration="2000"
   android:repeatMode="reverse"
   android:repeatCount="infinite"
   android:startOffset="0"
  />

может быть, это ответ, который вы ищете.

person EAGLE    schedule 14.05.2013
comment
Это круто! Как насчет того, чтобы вместо поворота я хотел перевести его на свое место в макете и одновременно исчезнуть? - person Si8; 08.11.2013

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

person Greg Giacovelli    schedule 20.02.2011

Или это галерея, которую вы ищете?

person Randy Sugianto 'Yuku'    schedule 21.02.2011