На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: PIL
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Скроллинг во flex/flash-приложениях - помощь новичку , прокрутка содержимого мобильных приложений
    Здравствйте. Сделал приложение во флекс (была необходимость в последствии использовать его на планшете). Суть такова - картинка слева, справа описание. Все нормально работает добавил полосы прокрутки, т.к. оно не помещается в стандартное окно и , казалось бы все хорошо, но только на персоналках. Содержимое можно просматривать(скроллить) колесиком мышки или используя полосу прокрутки.... На планшете возможности прокручивать касанием в любом месте окна нет - только используя полосу прокрутки, а это очень неудобно... Что я не сделал или сделал не так?
    Спасибо.
      Попробуй на событие TransformGestureEvent.GESTURE_PAN повесить обработчик, который будет выполнять скроллинг по данным события.
        Цитата Vesper @
        Попробуй на событие TransformGestureEvent.GESTURE_PAN повесить обработчик, который будет выполнять скроллинг по данным события.

        Т.е., общий алгоритм действий,- создаю объект класса Sprite с координатами/параметрами экрана планшета, далее создаю функцию, к которой прикручиваю событие TransformGestureEvent с обработчиками?
          Цитата atis @
          далее создаю функцию, к которой прикручиваю событие TransformGestureEvent с обработчиками?

          ...которую назначаешь обработчиком указанного события. Дальше читай мануалы, какие параметры у этого события, как указывается, куда был сделан жест и как быстро, чтобы тебе вычислить мощность прокрутки, и крути потом внутри своего приложения. Мало того, этот обработчик можно попробовать (не факт, что получится, правда) повесить на Stage.
            Цитата Vesper @

            В качестве примера во вложении сброшу кусок кода со Stage- нашел в примерах и попытался подстроить под себя (выскочило 2 ошибки об использовании -this- )
            Скрытый текст
            <?xml version="1.0" encoding="utf-8"?>
            <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
            xmlns:s="library://ns.adobe.com/flex/spark"
            xmlns:mx="library://ns.adobe.com/flex/mx"
            width="1020" height="520" preloaderChromeColor="#CEF6F3">
            <fx:Style source="newpr.css"/>

            <fx:Script>
            <![CDATA[
            import flash.display.Sprite;
            import flash.events.TouchEvent;
            import flash.ui.Multitouch;
            import flash.ui.MultitouchInputMode;

            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
            this.stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
            this.stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);

            private function onTouchBegin(e:TouchEvent):void
            {
            var dot:Sprite = new Sprite();
            dot.x = e.stageX;
            dot.y = e.stageY;
            this.stage.addChild(dot);
            dot.startTouchDrag(e.touchPointID, true);
            this.dots[e.touchPointID] = dot;
            }
            private function onTouchEnd(e:TouchEvent):void
            {
            var dot:Sprite = this.dots[e.touchPointID];
            this.stage.removeChild(dot);
            }
            ]]>
            </fx:Script>

            <s:Window>
            <s:systemChrome>none</s:systemChrome>
            <s:transparent>true</s:transparent>
            <s:x>0</s:x>
            <s:y>0</s:y>
            <s:height>520</s:height>
            <s:width>1020</s:width>
            </s:Window>

            <mx:TabNavigator x="0" y="16" width="1018" height="480" backgroundColor="#DAF1F5"
            chromeColor="#A5D0EE" contentBackgroundColor="#D8F6F1" focusColor="#1C63A5" >
            <mx:Canvas width="100%" height="100%" label="Новинки" chromeColor="#B3D4EB"
            fontFamily="Arial" fontSize="12" fontStyle="normal" fontWeight="normal"
            textDecoration="none">
            <mx:Image x="10" y="10" width="330" height="440" source="jpg/17.jpg"/>
            <s:Label x="352" y="10" width="378" height="439" chromeColor="#B3D4EB" fontFamily="Arial"
            fontSize="12" fontWeight="normal"
            text=" №17 ЭКИПАЖ.
            textAlign="left" verticalAlign="middle"/>
            <s:Image x="10" y="466" width="330" height="440" source="jpg/18.jpg"/>
            <s:Label x="352" y="466" width="378" height="439" fontFamily="Arial" fontSize="12"
            fontWeight="normal"
            text="№18 БЕЛОСНЕЖКА И ОХОТНИК. Т
            verticalAlign="middle"/>
              Какие ошибки выдает? Как-то нелогично читать "неверное использование this". Вероятно, у тебя этот код не в классе лежит, а где-то ещё, поэтому и this недоступен. В принципе, если тебе прокручивать столько же, сколько сдвинул, это решение подойдет.
                Код я привел сначала как он есть далее идут картинки и текст, думаю нет смысла до конца постить Canvas Imagt и Label.
                А ошибка такая: 1042 -Ключевое слово this не может использоваться в статических методах. Оно может использоваться только в методах экземпляров, закрытиях функций и глобальном коде.
                http://Справочник по ActionScript® 3.0
                  Ну да, а в класс эту структуру кто включать будет?
                    Доброго времени... Класс я создал (в настоящий момент он пустой), а как туда структуру эту включить никак не могу разобраться - штудирую мануалы, но , видно чего-то не понимаю... в приложении скрин, код я приводил в спойлере выше... Помогите новичку, если можете...newpr
                    Спасибо.
                      Повторяю ссылку в предыдущем посте она не открывается - ссылка за спойлером
                      Скрытый текст
                      user posted image


                      Добавлено
                      Или мне всю данную структуру включая переменный и функции поместить в созданный класс
                      Скрытый текст
                      package
                      {
                      public dynamic class newpr
                      {
                      public function newpr()
                      {
                      }
                      }
                      }
                      , а как же тогда к нему обратиться?
                        С классом разобрался билдер ошибок не выдает вроде так - user posted image, а как заставить процедуру работать - пока не разобрался... просто после <s:Window/> обратиться к созданному классу?

                        Добавлено
                        ой... за спойлером
                        Скрытый текст
                        user posted image


                        Добавлено
                        Прошу прощения ... не посмотрел, что радикал обрезает изображения здесь видно нормально....
                        Скрытый текст
                        user posted image

                        вопрос прежний - как заставить процедуру работать...
                        Спасибо.
                          Как я понимаю, твой newpr должен расширять что-либо из наследников DisplayObject, чтобы была доступна stage, и заодно EventDispatcher - то есть, одним из вариантов будет "extends Sprite". Потом, да, его нужно добавить на сцену. При этом в момент создания твоего объекта сцена недоступна, значит, нужно вешать listener'ы в ответ на событие ADDED_TO_STAGE, потому что в его обработчике уже установлен указатель на stage.

                          ExpandedWrap disabled
                            public class newpr extends Sprite {
                            private var dots:Array;
                            public function newpr() {
                                dots=new Array();
                                if (stage) addedToStage(); else addEventListener(Event.ADDED_TO_STAGE,addedToStage);
                            }
                            private function addedToStage(e:Event=null):void {
                                removeEventListener(Event.ADDED_TO_STAGE,addedToStage);
                                // а вот отсюда добавляешь все свои настройки
                                Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
                                this.stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
                                this.stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
                            }
                            private function onTouchBegin(e:TouchEvent):void
                            {
                            var dot:Sprite = new Sprite();
                            dot.x = e.stageX;
                            dot.y = e.stageY;
                            this.stage.addChild(dot);
                            dot.startTouchDrag(e.touchPointID, true);
                            this.dots[e.touchPointID] = dot;
                            }
                            private function onTouchEnd(e:TouchEvent):void
                            {
                            var dot:Sprite = this.dots[e.touchPointID];
                            this.stage.removeChild(dot);
                            }
                            Здравствуйте. Спасибо за помощь. Я добавил Ваши изменения в пакет... были вопросы у билдера к Event.ADDED_TO_STAGE и поскольку я не знал в каком он классе я сделал import flash.events.*
                            В итоге получилось следующее: . Кроме того я определил переменную dot как квадрат с размерами экрана на котором выводится приложение: var dot:Sprite = this.getRect(0,0,520,1020); Правильно ли это в данном случае?
                            Есть вопросы:
                            1. В разделе "Схема" - левая нижняя часть билдера, часть параметров отображена красными метками, хотя ошибок билдер после добавления класса больше не выдает, что-то еще нужно исправить?..
                            2. Я так не и разобрался как использовать созданный класс в данном проекте. Основная задача - чтобы на планшете содержимое перемещалось от прикосновений/перемещений пальцем по экрану. Мне нужно вызвать данный класc перед Tabnavigator или необходимо присвоить id для Canvas и вызывать его как метод для Canvas:
                            ExpandedWrap disabled
                               var id_Canvas:newrp =new newpr();
                              id_Canvas
                            ... И вот здесь ступор - как обратиться к методам класса newpr?

                            Большое спасибо за помощь!
                              Цитата atis @
                              Кроме того я определил переменную dot как квадрат с размерами экрана на котором выводится приложение: var dot:Sprite = this.getRect(0,0,520,1020); Правильно ли это в данном случае?

                              this.getRect() возвращает объект типа Rectangle, а далеко не Sprite, который можно таскать. То есть нет.
                              Цитата atis @
                              я сделал import flash.events.*
                              Хорошо. По идее, Event.ADDED_TO_STAGE находится в классе Event (flash.events.Event), но и полный импорт не повредит.

                              Цитата atis @
                              как обратиться к методам класса newpr?

                              Если быть более точным, тебе нужно получать наличие и перемещение объектов из массива id_Canvas.dots, которые к тому же являются "детьми" id_Canvas. Ты добавляешь экземпляр этого класса на сцену с координатами (0,0), он регистрирует прослушиватели на касание и порождает дочерние элементы класса Sprite, которые можно достать, используя id_Canvas.numChildren и id_Canvas.getChildAt(), документацию по использованию смотри ТУТ (англ.) или ТУТ (рус.), после чего ты всегда знаешь, в каких точках у тебя пользователь держит пальцы. Дальше на основании этих данных выполняй скроллинг как умеешь.
                                var dot:Sprite = this.getRect(0,0,520,1020); исправить на var dot:Sprite = this.getRect; или var dot:Sprite = new Sprite; как это было у меня раньше?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0465 ]   [ 15 queries used ]   [ Generated: 18.04.24, 23:26 GMT ]