2013-09-02 2 views
7

Я создаю анимацию, в которой изображение переводится с одного направления на другое, анимация перемещает половину изображения на стороне экрана, но изображение отображается полностью, когда анимация заканчивается. Я просто хочу показать половину изображения после анимации.Как показать часть изображения на экране в конце анимации

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

Ниже приведен мой файл xml и class.

анимация код

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration = "2000" 
    android:fillBefore="true" 
    android:fillEnabled="true" 
    android:fromXDelta = "-300%" 
    android:fromYDelta="200%" 
    android:toXDelta="60%"> 

</translate> 

animimv5.setAnimationListener(new AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
       imv5.setBackgroundResource(R.drawable.img5); 
      } 
      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
      @Override 
      public void onAnimationEnd(Animation animation) { 
       imv5.setBackgroundResource(R.drawable.img5_2); 
      } 
     }); 
+1

Проверьте этот пост: http://stackoverflow.com/questions/3345084/how-can-i-animate-a-view-in-android-and-have-it-stay-in-the-new-position-size fillAfter = true fillEnabled = true – Juangcg

+0

попробуйте использовать 'fillAfter (true)' – Siddhesh

+0

Какой SDK вы используете? Я могу отправить вам полное решение с помощью ObjectAnimator, но оно работает только с уровня API 11. – Ivelius

ответ

1

Вы можете попробовать следующее:

в XML (добавить это установить параметр) android:fillAfter или используя соответствующий метод в источнике класса setFillAfter(boolean)

Если установлено значение истинно , преобразование анимации применяется после завершения анимации . Согласно документации here Когда установлено значение true, преобразование анимации применяется после завершения анимации . Значение по умолчанию неверно. Если fillEnabled не равен , установите значение true, и анимация не будет установлена ​​в представлении, fillAfter - Предполагается, что это правда.

Дополнительных советы и разъяснение проверить Chet's blog post

Надеются, что это помогает ..;)

0

Здесь вы идете, сэр:

MainActivity : 

    public class MainActivity extends Activity { 

    private View animatedView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     animatedView = findViewById(R.id.view); 
    } 

    public void animate(View view) { 
     int targetX = ((View) animatedView.getParent()).getWidth() - animatedView.getWidth()/2; 
     ObjectAnimator.ofFloat(animatedView, "x", 0, targetX).setDuration(1000).start(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

Layout XML:

<RelativeLayout 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"> 

    <TextView 
      android:id="@+id/view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="#CC0000" 
      android:padding="30dp" 
      android:textColor="@android:color/white" 
      android:text="@string/hello_world"/> 
    <Button 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Animate" 
      android:onClick="animate" 
      android:id="@+id/button" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true"/> 

</RelativeLayout> 
Смежные вопросы