The documentation jest dość niejasne, co się dzieje, kiedy te metody są używane. Czy ktoś może wyjaśnić, w jaki sposób Matrix wpływa na mapę bitową, w której jest ustawiony? Używają tam terminu concatenate, ale nie jestem pewien, w jaki sposób termin ten odnosi się do danych współrzędnych (wcześniej używał go tylko w odniesieniu do manipulacji ciągami).Poszukuję objaśnienia post/pre/set Translate (w obiekcie Matrix) i jak z nich korzystać
Odpowiedz
Zestaw metod zastąpi bieżącą Matrix nowymi wartościami, bez względu na to, co Matryca zawierała wcześniej. Metoda przed i po zastosuje nową transformację przed lub po tym, co zawiera obecna Matryca.
W tym przykładzie, obrót zostanie zignorowany, ponieważ używamy metody określonej i m będzie zawierać tylko tłumaczenie:
Macierz M = new Matrix();
m.setRotate (90);
m.setTranslate (100, 100);
W tym przykładzie, końcowa matryca będzie tłumaczenie następuje przez obrót:
macierzy M = nowa macierz();
m.setTranslate (100, 100);
m.postRotacja (90);
W ostatnim przykładzie, końcowa matryca będzie obrót następuje tłumaczenia:
macierzy M = nowa macierz();
m.setTranslate (100, 100);
m.preRotate (90);
Jest trochę więcej informacji w tym (dość długie) postu:
http://www.satyakomatineni.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=2898
Nadzieję, że to pomaga.
Niektóre komentarze na temat współrzędnych, których używa, również byłyby super w tej odpowiedzi. np. "rotacja, po której następuje tłumaczenie" jest dość oczywiste: ale w jaki sposób osiąga się to w odniesieniu do osi X i Y? Jak obrócić coś o jego centralnym punkcie, a nie współrzędnym głównym. – RichieHH
Pytanie dotyczyło różnicy między metodami pre/post/set. Dokumenty api są dość jasne o różnych wariantach każdej transformacji. Oczywiście, jeśli zastosujesz transformacje w różnych zamówieniach, będzie to miało pewien wpływ na wartości parametrów, ale jest to nieco nietypowy temat. – Albin
To bardzo pomaga, myślę, że zespół programistów Androida powinien uwzględnić to w swoich dokumentach. – tim687