2016-02-23 317 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> 

我Activity類

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(無限)。

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個圖像之一隨機選擇。所以你的代碼在這種情況下不起作用 –