Android连续移动动画
我想做一个动画,在这个动画中,一个图像在每3秒后不断地从上到下移动。我使用以下代码实现了这一点 我的XML文件Android连续移动动画,android,animation,Android,Animation,我想做一个动画,在这个动画中,一个图像在每3秒后不断地从上到下移动。我使用以下代码实现了这一点 我的XML文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"
<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>
上面的代码工作正常,但动画不一致。例如,当我在图像移动时触摸屏幕时,动画的平滑度受到干扰,变得粗糙
有没有更好的方法来实现这一点?没有必要在每3秒后添加一个新的图像视图。您可以将repeatcount设置为-1(无限)
公共类MainActivity扩展活动{
私人翻译形象向下移动;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
向下移动=新的平移图像(0,0,-100,1000);
向下移动。设置持续时间(3000);
向下移动。setFillAfter(true);
向下移动。setRepeatCount(-1);
findViewById(R.id.image)。开始动画(向下移动);
}
}
实际上,我将扩展我的代码,以便从我拥有的5张图像中随机选择图像。因此,在这种情况下,您的代码将无法工作
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);
}
}
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>