Mam niestandardowy widok, który szybko nauczyłem się nie robić alokacji obiektów i przenosiłem wszystkie moje przydziały Malowania na inną metodę, dobrze.Unikanie przydziałów obiektów w onDraw() (StaticLayout)?
Potrzebuję użyć StaticLayout jednak dla niektórych tekstów, które miały pewne spannable "stuff" stosowane.
layoutBpm = new StaticLayout(bpmValue,
textPaintBPM, arcRadius, Layout.Alignment.ALIGN_NORMAL, 0, 1,
false);
layoutBpm.draw(canvas);
Wydawało mi się, że mam to na Drafcie, ale ostrzega mnie, aby tego uniknąć. Ważne jest dla mnie, że robię wszystko, co mogę, aby uniknąć problemów z wydajnością, więc staram się to zrobić właściwie.
Nie mogę znaleźć żadnej dokumentacji, którą mogę zrozumieć, która wyjaśnia, co faktycznie robią niektóre parametry StaticLayout (float spacingmult? Float spacingadd?), Ale trzecia z nich to chyba maksymalna szerokość tekstu StaticLayout które mogę uzyskać tylko dzięki narzędziu onMeasure, ponieważ odnosi się ono do rozmiaru płótna. To pozostawia mnie chcąc umieścić zadanie w Naśladowaniu lub na Drafcie, z których żaden nie wydaje mi się, że powinienem to zrobić. Czy można ustawić zadanie StaticLayout na onDraw, czy jest lepszy sposób na zrobienie tego?
Mam nadzieję, że to ma sens, jestem bardzo nowy w tym. Dziękuję za pomoc.
(edit: Zakładam umieszczenie tego zadania w metodzie i dzwonisz OnDraw/onMeasure jest po prostu głupie i zatrzyma Eclipse ostrzegając mnie, ale przyzwyczajenie faktycznie pomóc)
Dziękuję, to dało mi nieco nowy sposób patrzenia na rzeczy. Jedynym problemem, który mam do wykonania powyżej jest to, że 'textPaint' opiera się na' onMeasure() 'już jest wywoływanym (tekst jest skalowany zgodnie z rozmiarem płótna), podobnie jak" textWidth "(który określa kiedy tekst będzie zawijany), więc nie mogę zrobić 'createLayout()' w konstruktorze dla pierwszego przeglądania. Mogę umieścić go w 'onMeasure()', który według mnie nie jest tak często wywoływany? – Anthony
Tekst faktycznie zmienia DUŻO, widok, nad którym pracuję, jest w rzeczywistości okólnym SeekBarem, który zrobiłem, a StaticLayout jest używany do tekstu w środku, który odnosi się do postępu SeekBar. Podczas przeciągania palcem po okręgu wartość zmienia się stale. Pomyślałem, że chociaż wartość zmienia się bardzo, długość jest zawsze dopełniana do trzech cyfr, więc układ nigdy nie musiałby się dopasowywać, więc StaticLayout byłby w porządku. Mogę znaleźć tak mało dokumentacji na układach statycznych/dynamicznych, więc nie jestem pewien, czy to jest poprawne. Każda pomoc ponownie doceniona. – Anthony
W końcu (jak sądzę), zamieniłem 'onMeasure()' na 'onSizeChanged()' ponieważ moje potrzeby w zakresie układu są proste i umieszczam początkowe wywołanie 'createLayout()' zamiast 'onMeasure()'. Lint wydaje się nie mieć nic przeciwko przypisywaniu obiektów w 'onSizeChanged()' z jakiegoś powodu, ale nie lubi go w 'onMeasure()'. Wyobrażam sobie, że obie te metody są nazywane taką samą ilość razy, więc nie mam pojęcia, dlaczego jest w porządku w jednym, a nie w drugim, ale cokolwiek, wydaje się w porządku. Moją główną obawą było uzyskanie alokacji z 'onDraw()', którą zrobiłem. Dzięki jeszcze raz. – Anthony