klieve
@klieve
код, рисование, игры

Как сделать два события на одну кнопку?

Есть активити с кнопкой, запускающей анимацию. Мне нужно сделать два события на одну кнопку. Т.е. сперва запускается одна анимация, при повторном нажатии запускается вторая анимация и так они чередуются до бесконечности.
Вот мой код.
public class Main extends Activity
{
	private ImageView image;
	private Button button;	
	private Animation anim;

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);		
		image = (ImageView)findViewById(R.id.images);
		button = (Button)findViewById(R.id.button);	
		anim = AnimationUtils.loadAnimation(this, R.anim.anim);
        
      
        button.setOnClickListener(new OnClickListener()  {
        	@Override           
        	public void onClick(View v) {
        		image.startAnimation(anim);
        	}
        });
	}

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


нашел вот такой способ
redButtonListener = new View.OnClickListener() {
	@Override           
	public void onClick(View v) {
		myButton.setBackgroud(R.drawable.green);
		myButton.setOnClickListener(greenButtonListener);
		// выполняем дополнительные действия
	}
}

greenButtonListener = new View.OnClickListener() {
	@Override           
	public void onClick(View v) {
		myButton.setBackgroud(R.drawable.red);
		myButton.setOnClickListener(redButtonListener);
		// выполняем дополнительные действия
	}
}

Но не получается встроить к себе.
  • Вопрос задан
  • 8113 просмотров
Решения вопроса 1
VYakushev
@VYakushev
Разработчик Android в Nowtaxi
public class Main extends Activity {
	private ImageView image;
	private Button button;	
	private Animation anim1;
	private Animation anim2;

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

		image = (ImageView)findViewById(R.id.images);
		button = (Button)findViewById(R.id.button);	

		// получаем обе анимации		
		anim1 = AnimationUtils.loadAnimation(this, R.anim.anim1);
		anim2 = AnimationUtils.loadAnimation(this, R.anim.anim2);

		// устанавливаем первый обработчик      
		button.setOnClickListener(firstButtonListener);

		// запускаем первую анимацию
		image.startAnimation(anim1);
	}

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

	View.OnClickListener firstButtonListener = new View.OnClickListener() {
		@Override           
		public void onClick(View v) {
			// запускаем вторую анимацию
			image.startAnimation(anim2);
			// меняем обработчик нажатия кнопки на второй
			button.setOnClickListener(secondButtonListener);
		}
	}

	View.OnClickListener secondButtonListener = new View.OnClickListener() {
		@Override           
		public void onClick(View v) {
			// запускаем первую анимацию
			image.startAnimation(anim1);
			// возвращаем первый обработчик нажатия кнопки
			button.setOnClickListener(firstButtonListener);
		}
	}    
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Copperfield
Android dude
Используйте один слушатель и какую-либо глобальную переменную, хранящую флаг нажатия.
В слушателе что-то вроде этого:
if (flag) {
            image.startAnimation(anim);
            flag = false;
        } else {
            image.startAnimation(anotherAnim);
            flag = true;
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы