繁体   English   中英

如何在活动启动时立即启动动画而没有任何启动延迟

[英]How to start an animation immediately on activity launch without any start delay

我的MainAactivity从背景音乐开始(通过服务),我实现了一个动画,该动画应在与背景音乐一起启动活动后立即开始,但是动画在活动启动10秒钟后开始(音乐从活动启动开始) ,即使我尚未实现任何启动延迟。 有人能帮我吗? 我是Android新手。

我已按照以下动画教程制作: https : //www.javacodegeeks.com/2012/10/android-leaf-fall-like-animation-using.html

我的MainActivity.java:

private int[] PICTURES = {
        R.mipmap.f1, R.mipmap.f2, R.mipmap.f3, R.mipmap.f4,
};

private Rect display_Size = new Rect();
private RelativeLayout root_Layout;
private ArrayList<View> all_imageViews = new ArrayList<View>();
private float scale;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent i = new Intent(this,MusicService.class);
    startService(i);

    Display display = getWindowManager().getDefaultDisplay();
    display.getRectSize(display_Size);

    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);
    scale = metrics.density;

    root_Layout = (RelativeLayout) findViewById(R.id.main_layout);

    new Timer().schedule(new ExecTime(),0 , 1000);
}

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        int viewId = new Random().nextInt(PICTURES.length);
        Drawable d = getResources().getDrawable(PICTURES[viewId]);
        LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
        ImageView imageView = (ImageView) inflater.inflate(R.layout.animated_image_view, null);
        imageView.setImageDrawable(d);
        root_Layout.addView(imageView);

        all_imageViews.add(imageView);

        RelativeLayout.LayoutParams animationLayout = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
        animationLayout.setMargins(0, (int)(-3000*scale), 0, 0);
        animationLayout.width = (int) (50*scale);
        animationLayout.height = (int) (50*scale);

        startAnimation(imageView);
    }
};

public void startAnimation(final ImageView animView) {

    animView.setPivotX(animView.getWidth()/2);
    animView.setPivotY(animView.getHeight()/2);

    final ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
    animator.setDuration(15000);

    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        int angle = 50 + (int)(Math.random() * 101);
        int move = new Random().nextInt(display_Size.right);

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float value = (Float) (animation.getAnimatedValue());
            animView.setRotation(angle*value);
            animView.setTranslationX((move-100)*value);
            animView.setTranslationY((display_Size.bottom + (3000*scale))*value);

        }
     });

     animator.start();

 }

private class ExecTime extends TimerTask {
    @Override
    public void run() {
        handler.sendEmptyMessage(Constants.EMPTY_MESSAGE);
    }
}

当启动应用程序时,android创建一个新的过程,在此过程中,它会根据应用程序主题或作为入口点的活动主题创建一个黑白屏幕。 如果我们的应用程序很复杂并覆盖了通常用于初始化分析的应用程序对象,则可以增加此负载。 阅读本文以获得更多信息。 http://saulmm.github.io/avoding-android-cold-starts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM