воскресенье, 22 января 2012 г.

Вращение изображения вокруг своей оси

Сегодня решил разобраться как сделать вращение изображения вокруг своей оси в своей игре, и начал спрашивать google. Google мне в ответ показывал много разного добра, но ничего толком умного он показывать не хотел, тогда я залез на забугорные американские сайты порылся там, на StackOwerflow, почитал там и набрел на маленькую заметку на одном из сайтов как такое сделать, решил что кому-то можно пригодится по этому делюсь с Вами как это делается.

Создаем проект в Eclipse — File — New — Android Project — Name Of Project.

И нам нужно сразу изменить наш onCreate(), так как мы будет рисовать на сцене, а значит будем использовать класс View для отображения объектов. Как обычно по старинке открываем наш Main.java и пишем:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new GraphicsView(this));
    }


GraphicsView — наш класс который будет рисовать всю нашу красоту.

Дальше нам нужно создать этот класс — GraphicsView.java, открываем его пишем вот такую красатень:

GraphicsView.java
public class GraphicsView extends View {
        private Animation anim;
        
        private Bitmap bmp;
        private int centerXOffset;
        private int centerYOffset;

        public GraphicsView(Context context) {
            super(context);
            
            bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
            centerXOffset = bmp.getWidth() / 2;
            centerYOffset = bmp.getHeight() / 2;
        }
        
        private void createAnim(Canvas canvas) {
            anim = new RotateAnimation(0, 360, canvas.getWidth() / 2, canvas.getHeight() / 2);
            anim.setRepeatMode(Animation.REVERSE);
            anim.setRepeatCount(Animation.INFINITE);
            anim.setDuration(10000L);
            anim.setInterpolator(new AccelerateDecelerateInterpolator());

            startAnimation(anim);
        }

        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            // creates the animation the first time
            if (anim == null) {
                createAnim(canvas);
            }

            int centerX = canvas.getWidth() / 2;
            int centerY = canvas.getHeight() / 2;
            
            canvas.drawBitmap(bmp, centerX - centerXOffset, centerY - centerYOffset, null);
        }
    }


Здесь мы наследуем класс рисования View, создаем наш рисунок, загружаем его в конструкторе и делаем по центру для красивого отображения на сцене. Ну и конечно рисуем на сцене в методе onDraw().

Так же android включает в себя несколько типов анимации:
RotateAnimation — для вращения вокруг точки.
AlphaAnimation — для исчезновения и появления.
ScaleAnimation — для того, чтобы сделать изображения большими и маленькими.
TranslateAnimation — для перемещения вещей вокруг своей оси.
AnimationSet — для объединения нескольких анимаций в одну

Метод createAnim() реализует вращение картинки вокруг центра вечно, картинка крутится вперед и назад. Продолжительность 10000L представляет собой общее время, необходимое для одного вращения — вперед и назад.

Вот что должно получиться:

3 комментария:

  1. Вот это мне и нужно было, спасибо !
    Пока не попробовал, задам вопрос, а если несколько объектов ? Они будут все крутиться ?

    ОтветитьУдалить
    Ответы
    1. Не знаю, несколько картинок я не пробовал, думаю если их закинуть в список и вывести как список в массиве то будет все крутиться :)

      Удалить
    2. Да тут крутиться весь канвас.

      Удалить