Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.252.243] |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствйте. Сделал приложение во флекс (была необходимость в последствии использовать его на планшете). Суть такова - картинка слева, справа описание. Все нормально работает добавил полосы прокрутки, т.к. оно не помещается в стандартное окно и , казалось бы все хорошо, но только на персоналках. Содержимое можно просматривать(скроллить) колесиком мышки или используя полосу прокрутки.... На планшете возможности прокручивать касанием в любом месте окна нет - только используя полосу прокрутки, а это очень неудобно... Что я не сделал или сделал не так?
Спасибо. |
Сообщ.
#2
,
|
|
|
Попробуй на событие TransformGestureEvent.GESTURE_PAN повесить обработчик, который будет выполнять скроллинг по данным события.
|
Сообщ.
#3
,
|
|
|
Цитата Vesper @ Попробуй на событие TransformGestureEvent.GESTURE_PAN повесить обработчик, который будет выполнять скроллинг по данным события. Т.е., общий алгоритм действий,- создаю объект класса Sprite с координатами/параметрами экрана планшета, далее создаю функцию, к которой прикручиваю событие TransformGestureEvent с обработчиками? |
Сообщ.
#4
,
|
|
|
Цитата atis @ далее создаю функцию, к которой прикручиваю событие TransformGestureEvent с обработчиками? ...которую назначаешь обработчиком указанного события. Дальше читай мануалы, какие параметры у этого события, как указывается, куда был сделан жест и как быстро, чтобы тебе вычислить мощность прокрутки, и крути потом внутри своего приложения. Мало того, этот обработчик можно попробовать (не факт, что получится, правда) повесить на Stage. |
Сообщ.
#5
,
|
|
|
Цитата 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"/> |
Сообщ.
#6
,
|
|
|
Какие ошибки выдает? Как-то нелогично читать "неверное использование this". Вероятно, у тебя этот код не в классе лежит, а где-то ещё, поэтому и this недоступен. В принципе, если тебе прокручивать столько же, сколько сдвинул, это решение подойдет.
|
Сообщ.
#7
,
|
|
|
Код я привел сначала как он есть далее идут картинки и текст, думаю нет смысла до конца постить Canvas Imagt и Label.
А ошибка такая: 1042 -Ключевое слово this не может использоваться в статических методах. Оно может использоваться только в методах экземпляров, закрытиях функций и глобальном коде. http://Справочник по ActionScript® 3.0 |
Сообщ.
#8
,
|
|
|
Ну да, а в класс эту структуру кто включать будет?
|
Сообщ.
#9
,
|
|
|
Доброго времени... Класс я создал (в настоящий момент он пустой), а как туда структуру эту включить никак не могу разобраться - штудирую мануалы, но , видно чего-то не понимаю... в приложении скрин, код я приводил в спойлере выше... Помогите новичку, если можете...newpr
Спасибо. |
Сообщ.
#10
,
|
|
|
Повторяю ссылку в предыдущем посте она не открывается - ссылка за спойлером
Скрытый текст Добавлено Или мне всю данную структуру включая переменный и функции поместить в созданный класс Скрытый текст package { public dynamic class newpr { public function newpr() { } } } |
Сообщ.
#11
,
|
|
|
С классом разобрался билдер ошибок не выдает вроде так - , а как заставить процедуру работать - пока не разобрался... просто после <s:Window/> обратиться к созданному классу?
Добавлено ой... за спойлером Скрытый текст Добавлено Прошу прощения ... не посмотрел, что радикал обрезает изображения здесь видно нормально.... Скрытый текст вопрос прежний - как заставить процедуру работать... Спасибо. |
Сообщ.
#12
,
|
|
|
Как я понимаю, твой newpr должен расширять что-либо из наследников DisplayObject, чтобы была доступна stage, и заодно EventDispatcher - то есть, одним из вариантов будет "extends Sprite". Потом, да, его нужно добавить на сцену. При этом в момент создания твоего объекта сцена недоступна, значит, нужно вешать listener'ы в ответ на событие ADDED_TO_STAGE, потому что в его обработчике уже установлен указатель на stage.
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); } |
Сообщ.
#13
,
|
|
|
Здравствуйте. Спасибо за помощь. Я добавил Ваши изменения в пакет... были вопросы у билдера к Event.ADDED_TO_STAGE и поскольку я не знал в каком он классе я сделал import flash.events.*
В итоге получилось следующее: Скрытый текст Есть вопросы: 1. В разделе "Схема" - левая нижняя часть билдера, часть параметров отображена красными метками, хотя ошибок билдер после добавления класса больше не выдает, что-то еще нужно исправить?.. 2. Я так не и разобрался как использовать созданный класс в данном проекте. Основная задача - чтобы на планшете содержимое перемещалось от прикосновений/перемещений пальцем по экрану. Мне нужно вызвать данный класc перед Tabnavigator или необходимо присвоить id для Canvas и вызывать его как метод для Canvas: var id_Canvas:newrp =new newpr(); id_Canvas Большое спасибо за помощь! |
Сообщ.
#14
,
|
|
|
Цитата atis @ Кроме того я определил переменную dot как квадрат с размерами экрана на котором выводится приложение: var dot:Sprite = this.getRect(0,0,520,1020); Правильно ли это в данном случае? this.getRect() возвращает объект типа Rectangle, а далеко не Sprite, который можно таскать. То есть нет. Цитата atis @ Хорошо. По идее, Event.ADDED_TO_STAGE находится в классе Event (flash.events.Event), но и полный импорт не повредит. я сделал import flash.events.* Цитата atis @ как обратиться к методам класса newpr? Если быть более точным, тебе нужно получать наличие и перемещение объектов из массива id_Canvas.dots, которые к тому же являются "детьми" id_Canvas. Ты добавляешь экземпляр этого класса на сцену с координатами (0,0), он регистрирует прослушиватели на касание и порождает дочерние элементы класса Sprite, которые можно достать, используя id_Canvas.numChildren и id_Canvas.getChildAt(), документацию по использованию смотри ТУТ (англ.) или ТУТ (рус.), после чего ты всегда знаешь, в каких точках у тебя пользователь держит пальцы. Дальше на основании этих данных выполняй скроллинг как умеешь. |
Сообщ.
#15
,
|
|
|
var dot:Sprite = this.getRect(0,0,520,1020); исправить на var dot:Sprite = this.getRect; или var dot:Sprite = new Sprite; как это было у меня раньше?
|