Хотелось бы сделать причудливые индикаторы выбора. Как получить ограничительную рамку для выбранных в данный момент символов?Как получить ограничительную рамку для текущего выбора?
ответ
Это было нетривиально. Во-первых, для выбора может потребоваться более одного прямоугольника. Затем нет удобного способа сделать это.
Вот что я должен был сделать:
var start:int = op.activePosition < op.anchorPosition ? op.activePosition : op.anchorPosition;
var end:int = op.activePosition > op.anchorPosition ? op.activePosition : op.anchorPosition;
var textFlow:TextFlow = this.textFlow;
var rectangles:Dictionary = new Dictionary();
// For each selected character, make a box
for(var i:int=start; i < end; i++) {
var flowLine:TextFlowLine = textFlow.flowComposer.findLineAtPosition(i, true);
if(rectangles[ flowLine.absoluteStart ] == null) {
rectangles[ flowLine.absoluteStart ] = new Rectangle();
(rectangles[ flowLine.absoluteStart ] as Rectangle).x = 0xffffff;
(rectangles[ flowLine.absoluteStart ] as Rectangle).right = 0;
}
var currentRect:Rectangle = rectangles[ flowLine.absoluteStart ];
var textLine:TextLine = flowLine.getTextLine(true);
var atomIndex:int = textLine.getAtomIndexAtCharIndex(i);
if(atomIndex >= 0) {
var atomBounds:Rectangle = textLine.getAtomBounds(atomIndex);
var pt:Point = this.globalToLocal(textLine.localToGlobal(new Point(atomBounds.left, atomBounds.top)));
if(pt.x <= currentRect.left) {
currentRect.left = pt.x;
currentRect.top = pt.y;
}
pt = this.globalToLocal(textLine.localToGlobal(new Point(atomBounds.right, atomBounds.bottom)));
if(pt.x >= currentRect.right) {
currentRect.right = pt.x;
currentRect.bottom = pt.y;
}
}
}
return rectangles;
Я не верю, что есть тривиальный способ получить полный контроль над этим, из оглядывая документации немного, я увидел это: http://opensource.adobe.com/wiki/display/flexsdk/Spark+Text+Primitives#SparkTextPrimitives-FTE
[Style (имя = «focusedTextSelectionColor», тип =» UINT», формат = "Color", наследуйте = "да")]
[Style (имя = "inactiveTextSelectionColor", тип = "UINT", формат = "Color", наследуйте = "да")]
[Стиль (name = "unocusedTextSelectionColor", type = "uint", format = "Color", inherit = "yes")]
также обратите внимание:
позиция привязки - индекс символа, указывающий конец выбора, который остается фиксированным, когда вы расширяете выделение с помощью клавиш со стрелками.
активная позиция - индекс символа, указывающий конец выбора, который перемещается при продлении выделения клавишами со стрелками.
Поскольку все это только цвета (или индексы), я не знаю, смогут ли они получить всю причудливость, которую вы хотели бы сделать. Я работал над чем-то в Flex 3, чтобы иметь дело с пользовательскими элементами управления выбором текста и в конечном итоге использовал «буфер вне экрана», где я помещал TextField вне экрана с теми же свойствами, что и на экране, а затем сбрасывал символы 1 на 1 пока я не добрался до нужной ширины, я мог бы выяснить, где в персонажах элемент управления был сброшен (вроде андроида).
Я предлагаю выполнить поиск вышеуказанных стилей в SDK, который у вас есть (в частности, в RichEditableText и его суперклассах, я бы сделал это, но там есть довольно много версий и не знаю, какой из них вы используете, TLF и FTE оба немного в потоке, похоже). Как только вы найдете, где используются эти стили, вы, вероятно, будете находиться рядом с кодом рисования индикатора выбора, и, вероятно, вам придется расширять его из любого класса, чтобы переопределить соответствующие методы.
Извините, я не могу дать вам прямой ответ, но, надеюсь, это поможет, или кто-то другой сможет перезвонить, если есть более простой способ.
Shaun
- 1. получить ограничительную рамку графа D3
- 2. Получить ограничительную рамку пути SVG
- 3. Получить ограничительную рамку элемента svg?
- 4. Как получить ограничительную рамку преобразованного текста (java)?
- 5. Как получить ограничительную рамку из DbGeography MULTIPOINT?
- 6. Как получить ограничительную рамку объекта mapboxgl.GeoJSONSource?
- 7. PostGIS: ограничительную рамку MultiPolygon
- 8. Как получить ограничительную рамку объекта geojson?
- 9. Как вычислить ограничительную рамку для Expander?
- 10. Получить фактическую ограничительную рамку текста в RaphaelJS
- 11. получить ограничительную рамку текста и обновить холст
- 12. Получить ограничительную рамку стриженных и вращать прямоугольник
- 13. получить ограничительную рамку от объекта ggmap
- 14. получить двумерную ограничительную рамку от 3D-объекта
- 15. Производите ограничительную рамку из контуров
- 16. Как получить ограничительную рамку для элемента div в jquery
- 17. OpenCV: Как получить ограничительную рамку для каждого контура?
- 18. Как получить ограничительную рамку для экземпляров модели в libgdx?
- 19. Как получить ограничительную рамку для элемента HTMLAgilityPack DOM в C#?
- 20. Получите ограничительную рамку повернутого объекта
- 21. Установить ограничительную рамку на SKMapView
- 22. Вычислить ограничительную рамку чертежа GDI +
- 23. Перетащите ограничительную рамку компенсирована математика
- 24. Разверните ограничительную рамку пути SVG
- 25. Получить ограничительную рамку для всего, что можно увидеть в OpenGl
- 26. Получить ограничительную рамку для пути SVG с помощью jQuery
- 27. Как извлечь ограничительную рамку модели в Blender?
- 28. Как вычислить ограничительную рамку строки CATextLayer?
- 29. Как повернуть ограничительную рамку в XNA?
- 30. D3js: Как получить реальную ограничительную рамку объектов, пересекающих антимеридиан?