2016-02-23 2 views
0

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

Мой XML-файл

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="left|top" 
    android:baselineAligned="false" 
    android:background="#ffffff"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/layout1"> 
     </RelativeLayout> 
</LinearLayout> 

Мой класс активность

import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.view.animation.TranslateAnimation; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

import java.util.Timer; 
import java.util.TimerTask; 

public class GameActivity extends AppCompatActivity { 

    private RelativeLayout layout1; 

    private TranslateAnimation moveDownwards; 
    private Handler handler = new Handler(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 

     layout1 = (RelativeLayout) findViewById(R.id.layout1); 

     moveDownwards = new TranslateAnimation(0, 0, -100, 1000); 
     moveDownwards.setDuration(3000); 
     moveDownwards.setFillAfter(true); 

     startTimer(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     startTimer(); 
    } 

    private void startTimer() { 
     Timer timer = new Timer(); 
     TimerTask task = new TimerTask() { 
      @Override 
      public void run() { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         ImageView iv1 = new ImageView(GameActivity.this); 
         iv1.setImageResource(R.drawable.c_orange); 

         layout1.addView(iv1); 

         iv1.startAnimation(moveDownwards); 
        } 
       }); 
      } 
     }; 
     timer.schedule(task,0,3000); 
    } 
} 

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

Есть ли лучший способ достичь этого ???

ответ

0

Нет необходимости добавлять новый вид изображения через каждые 3 секунды. Вы можете установить repeatcount -1 (INFINITE).

public class MainActivity extends Activity { 

    private TranslateAnimation moveDownwards; 

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

     moveDownwards = new TranslateAnimation(0, 0, -100, 1000); 
     moveDownwards.setDuration(3000); 
     moveDownwards.setFillAfter(true); 
     moveDownwards.setRepeatCount(-1); 
     findViewById(R.id.image).startAnimation(moveDownwards); 
    } 

} 



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="start|top" 
    android:background="#ffffff" > 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

</RelativeLayout> 
+0

Фактически я собираюсь расширить свой код таким образом, чтобы изображение было случайно выбрано из одного из 5 изображений, которые у меня есть. Таким образом, ваш код не будет работать в этом случае –

Смежные вопросы