Jak prawidłowo przesunąć widok?
Czy ktoś może wyjaśnić noobowi prawidłowy sposób animowania widoku, aby jego obszar dotykowy i obraz rzeczywiście się poruszały ?!
Przeczytałem wiele postów i pytań oraz samouczków, ale żaden nie wyjaśnia, co porusza układ i co porusza obraz, dzięki czemu mogę animować widok, a następnie pozostawić go w nowej pozycji.
Jest to przykładowa metoda, z którą pracuję, próbując wielu różnych kombinacji, aby nie odnieść sukcesu. Widok znajduje się w rodzicu RelativeLayout. Jest to dotykowe menu ikon, które jest animowane za pomocą zasobu xml po kliknięciu, aby zsunąć się z ekranu, pozostawiając tylko małą kartę pokazującą miejsce, w którym musi pozostać, aż do ponownego kliknięcia.
<code>public void RetractTools (View v){ final ImageView finalImage1 = (ImageView) findViewById(R.id.paintsView); Animation slideout = AnimationUtils.loadAnimation(this, R.anim.slideout_tools); slideout.setFillAfter(true); slideout.setAnimationListener(new AnimationListener() { @Override public void onAnimationEnd(Animation animation) { finalImage1.setEnabled(true); optionMenu.showing = false; optionMenu.inMotion = false; finalImage1.layout(1258, 668, 1697, 752); finalImage1.setRight(1280); finalImage1.invalidate(); } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationStart(Animation arg0) { finalImage1.setEnabled(false); } }); optionMenu.inMotion = true; v.startAnimation(slideout); }// End RetractMenu </code>
Bez względu na to, co próbuję, napotykam problemy. setFillAfter nie robi nic po ustawieniu w pliku xml. Ustawiony programowo pozostawia obraz we właściwym miejscu, ale elementy sterujące dotykiem pozostają tam, gdzie było menu. Próbowałem setLeft i setRight, które najwyraźniej tylko przesuwają obraz, a nie pozycję widoku i różnego rodzaju różne opcje układu, i wypełniają, nie wypełniają i nie unieważniają, a nie, ale nie mogą rozwiązać. Wyraźnie nie podkreślam podstawowej mechaniki potrzebnej do pozycjonowania i renderowania widoku! :RE
Dzięki.
EDYCJA: Rozwiązanie
Dla każdego, kto ma podobne problemy, tak właśnie znalazłem pracę z układami względnymi. Tworzysz obiekt LayoutParams o określonym rozmiarze, a następnie możesz przypisać mu pozycje. na przykład.
<code> final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); position.leftMargin = 440; </code>
Następnie przypisz to do swojego widoku
<code> myView.setLayoutParams(position); </code>
Podsumowując, używasz obiektu LayoutParams jako interfejsu do pozycji widoku, zamiast uzyskiwać dostęp do współrzędnych widoku bezpośrednio, tak jak zakładałem.