crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Flickable реализация функции centerOn(point)
Vilgeforc
  опции профиля:
сообщение 26.4.2017, 4:12
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 19.2.2014
Пользователь №: 4060

Спасибо сказали: 3 раз(а)




Репутация:   0  


Добрый вечер!

Имеется Flickable в котором содержится довольно большая картинка, и появилась необходимость программно центровать это изображение в точке.
Пытался сделать так:
        function centerOn(x, y)
        {
                var dx = contentX + width/2 - x;
                var dy = contentY + height/2 - y;
                var des = flickDeceleration;

                flickDeceleration = Math.sqrt(dx*dx + dy*dy);
                var mult = 1.7
                flick(dx * mult, dy * mult);
                flickDeceleration = des;
        }


Но чтобы сфокусироваться правильно приходится несколько раз вызывать, что смотрится ужасно. Как сделать это правильнее?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vilgeforc
  опции профиля:
сообщение 26.4.2017, 11:56
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 19.2.2014
Пользователь №: 4060

Спасибо сказали: 3 раз(а)




Репутация:   0  


Пока обошелся таким кодом.

        function centerOn(x, y)
        {
            moveAnimation.targetX = Math.max(0, Math.min(x, contentWidth - width));
            moveAnimation.targetY = Math.max(0, Math.min(y, contentHeight - height));

            if (contentX != moveAnimation.targetX ||
                contentY != moveAnimation.targetY)
                moveAnimation.start();
        }

        ParallelAnimation {
            id: moveAnimation
            property int targetX: 0
            property int targetY: 0

            running: false
            NumberAnimation {
                target: mapArea
                property: "contentY"
                duration: 400;
                //from: mapArea.contentY;
                to: moveAnimation.targetY
            }
            NumberAnimation {
                target: mapArea
                property: "contentX"
                duration: 400;
                //from: mapArea.contentY;
                to: moveAnimation.targetX
            }
        }


но хотелось бы конечно более нативными методами Flickable это сделать. Хотя и так уже вполне неплохо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 18:11