Как правильно переместить вид?
Может ли кто-нибудь объяснить нубу, как правильно анимировать вид, чтобы его область касания и изображение действительно двигались вместе ?!
Я прочитал много постов, вопросов и учебных пособий, но ни один из них не объясняет, что перемещает макет и что перемещает изображение, так что я могу анимировать вид и затем оставить его на новом месте.
Это пример метода, с которым я работаю, пробуя множество разных комбинаций, но безуспешно. Представление находится в родительском RelativeLayout. Это сенсорное меню значков, и оно анимируется с помощью xml-ресурса по щелчку, чтобы соскользнуть с экрана, оставляя лишь небольшую вкладку, показывающую, где он должен оставаться до повторного нажатия.
<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>
Независимо от того, что я пытаюсь, я сталкиваюсь с проблемами. setFillAfter ничего не делает при установке в xml-файл. Установленный программно, он оставляет изображение в нужном месте, но сенсорные элементы управления остаются там, где было меню. Я пробовал setLeft и setRight, которые, по-видимому, только перемещают изображение, а не позицию просмотра и все виды различных параметров макета, а также заливку, а не заливку и аннулирование, а также нет, но не могут ее решить. Я явно не понимаю основную механику, необходимую для позиционирования и визуализации! : D
Благодарю.
EDIT : Solution
Для тех, у кого есть похожие проблемы, я нашел способ работать с относительными макетами. Вы создаете объект LayoutParams с указанным размером, а затем вы можете назначить ему позиции. например.
<code> final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); position.leftMargin = 440; </code>
Затем назначьте это на ваш взгляд
<code> myView.setLayoutParams(position); </code>
Таким образом, в итоге вы используете объект LayoutParams в качестве интерфейса к позиции вашего представления, а не обращаетесь к координатам представления непосредственно, как я предполагал.