анимация кнопки Android с щелчком - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь сделать летающие воздушные шары (вверх и вниз, бесконечно) и, нажав на один из них, он изменит свое направление. Я пытался использовать анимацию, но она не поддерживает щелчок по представлению в текущей позиции в текущий момент времени. Я знаю, что есть два метода, по крайней мере:

  • использовать OpenGL
  • и используйте холст.

Я не хочу использовать OpenGL для выхода из простой анимации. И я не понимаю, как это сделать, используя Canvas (были прочитаны this , Google Docs и некоторые поисковые ссылки Google). Мне не нужен код, все, что мне нужно, это способ, как это сделать, и алгоритм.

1 Ответ

1 голос
/ 15 декабря 2011

Хорошо, это то, что я настроил для одного из моих проектов, который будет работать именно так, как вам нужно ...

Вам нужно создать 4 основных аспекта:
- Задание (расширитьActivity)
- SurfaceView (расширить SurfaceView, реализовать SurfaceHolder.Callback)
- Thread (расширить поток)
- объекты, которые взаимодействуют (расширить Drawable)

Activity запускается и генерирует SurfaceViewэто создает поток.Представление или Поток могут содержать объекты, с которыми вы рисуете / взаимодействуете, в зависимости от того, как вы хотите сохранить данные на этом этапе, но это проще всего, если вы придумали дизайн, который имеет наименьшую связь между классами.

После запуска поток работает постоянно, пока не будет остановлен (установка isRunning в значение false):

/**
* Processing loop
*/
public void run() {   
    while (isRunning) {
        try {
                sleep(25);
            } catch (InterruptedException e) {
                Log.e("Thread","Thread Interruption");
                e.printStackTrace();
            }
        update();
    }
    Log.d("Thread", "Game Loop Stopped");
}

/**
 * Main processing of the game loop.
 */
private void update() {
    handleInput();
    updatePhysics();
    updateUI();
    updateState();
    updateAI();
    updateAnimations();
    updateSound();
    updateVideo();
}

В этом классе вы видите метод update(), который выполняет множество действий при каждой итерациипоток.

Методы, которые вас больше всего интересуют, это методы handleInput, updateUI и updatePhysics.

В handleInput вы сделаете обратный вызов дляSurfaceView для получения данных, необходимых для обработки информации.Мой handleInput довольно прост в том, что он просто берет MotionEvent из onTouchEvent класса SurfaceView (это реализуется, когда вы используете интерфейс SurfaceHolder.OnCallBack).

Метод updateUI вызывает update SurfaceView, где он перерисовывает Canvas с каждым объектом, или шар

public void update(List<Actor> actors) {
        Canvas canvas = null;       
        try {
            canvas = surface.lockCanvas();
            synchronized (surface) {
                //Blank the Canvas

                for (int i = 0; i < actors.size(); i++) {   
                    actors.get(i).draw(canvas);
                }
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        } finally {
            if (canvas != null) {
                surface.unlockCanvasAndPost(canvas);
            }
        }   
    }

Здесь мы видим, что он вызывает *Метод 1035 *, передающий объект canvas каждому из ваших интерактивных объектов.Я назвал мои "Актеры" в коде выше.Как вы решите реализовать draw, зависит от вас, но, похоже, вы будете использовать множество функций canvas.drawBitmap().

Возвращаясь к методу updatePhysics, который вы захотите использовать в Thread.это обновить объекты до или после того, как они нарисованы на экране.Для вас вы захотите, чтобы они изменили свои позиции X и / или Y на экране или изменили направление его движения после того, как handleInput решит, что вы ударили по воздушному шару.


Это оченьтрудно объяснить это хорошо в ответе StackOverflow.Если вы действительно хотите, я могу попытаться собрать что-то более информативное в эти выходные и опубликовать его для вас (я могу предоставить свои диаграммы классов UML среди другой информации, такой как примеры изображений, структуры и потоки данных.

Пожалуйста,Я знаю, смогу ли я вам чем-нибудь помочь! Обратите внимание, что это не вся моя работа. Я использовал много онлайн-уроков по базовой структуре игры для Android, но пока не имею ссылок, чтобы предоставить ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...