마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 객체 여러개의 애니메이션

0 추천
package com.example.transtest;

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

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;


public class MainActivity extends ActionBarActivity {
	
	private TimerTask mTask, mTask2;
	private Timer mTimer;
	ImageView[] ivv;
	TranslateAnimation[] ani;
	static int ia = 0;
    @SuppressLint("NewApi") @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        RelativeLayout r = (RelativeLayout)findViewById(R.id.basic);
        ivv = new ImageView[50];
        ani = new TranslateAnimation[50];
        for(int i = 0; i < 50; i++)
        {
        	
        	ivv[i] = new ImageView(this);
        	ivv[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            ivv[i].setBackgroundResource(R.drawable.blue);
            
            r.addView(ivv[i]);
            ivv[i].setVisibility(View.INVISIBLE);
            int rand = (int)Math.random() * 5;
            ani[i] = new TranslateAnimation(Animation.RELATIVE_TO_SELF, (float)rand,
            		Animation.RELATIVE_TO_SELF, (float)rand,
            		Animation.RELATIVE_TO_SELF, -2.0f,
            		Animation.RELATIVE_TO_SELF, 5.0f);
            ani[i].setFillAfter(true);
            ani[i].setDuration(5000);
            ani[i].setRepeatMode(Animation.RESTART);
            ani[i].setRepeatCount(Animation.INFINITE);
        }

        
        mTask = new TimerTask()
        {
        	
        	
			@Override
			public void run() {
				
				ivv[ia].startAnimation(ani[ia]);
				ia++;
			}
        	
        };
        mTask2 = new TimerTask()
        {

			@Override
			public void run() {
				ia++;
				ivv[ia].startAnimation(ani[ia]);
				
			}
        	
        };
        mTimer = new Timer();
        mTimer.schedule(mTask, 0, 5000);
        mTimer.schedule(mTask2, 3000, 5000);
        
        
        
    }


    @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;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

 

 

리듬게임처럼 여러개의 객체가 위에서 아래로 내려오게하고싶습니다.

 

지금 이미지뷰 객체를 50개만들고 애니메이션 객체를 50개를 배열로 만들었습니다.

애니메이션 객체를 하나만 만들고 썼더니 중간에 앱이 죽었습니다. 그래서 배열로 만들었습니다.

그리고 각각 초기화를 해준 다음에 TimerTask에서 애니메이션을 시작시켰습니다.

 

그런데 Task를 하나만 돌리면 객체 하나만 반복적으로 내려오고 두개를 돌리면 중간에 앱이 죽습니다..

지금 공부하면서 하고는 있는데 아예 백지상태에서 만들려고하니까 어려움이 많습니다..

 

지금 방법이 제대로된 것 같지않은데 적절한 해결방법이 없을까요..

익명사용자 님이 2015년 2월 23일 질문
로그를 보고 뭐가 문제인지 부터 알아야 할듯 합니다.

1개의 답변

0 추천

TimerTask 와 Timer 도 쌍으로 각 에니메이션객체에 1:1로 대응하도록 해보셔요..

nicehee (73,100 포인트) 님이 2015년 2월 23일 답변
...