Como mover corretamente uma visão?
Alguém pode, por favor, explicar a um noob a maneira correta de animar um View para que sua área de toque e imagem realmente se movam juntas ?!
Eu li muitas postagens e perguntas e tutoriais, mas nenhum explica o que move o layout e o que move a imagem de forma que eu possa animar uma visualização e, em seguida, deixá-la em sua nova posição.
Este é um método de exemplo com o qual estou trabalhando, tentando várias combinações diferentes para não ter sucesso. A exibição está no pai RelativeLayout. É um menu tocável de ícones, e é animado com um recurso xml em um clique para deslizar para fora da tela, deixando apenas uma pequena guia mostrando, onde ele precisa ficar até ser clicado novamente.
<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>
Não importa o que eu tente, eu encontro problemas. setFillAfter não faz nada quando definido no arquivo xml. Definido programaticamente, deixa a imagem no lugar certo, mas os controles de toque permanecem onde o menu estava. Eu tentei setLeft e setRight que, aparentemente, só movem a imagem, não a posição da vista, e todos os tipos de diferentes opções de layout, e preenchem e não preenchem e invalidam e não, mas não podem resolvê-lo. Eu claramente não entendo a mecânica subjacente necessária para posicionar e dar uma visão! : D
Obrigado.
EDITAR: Solução
Para qualquer um que tenha problemas semelhantes, é assim que descobri que trabalhei com layouts relativos. Você cria um objeto LayoutParams com o tamanho especificado e, em seguida, pode atribuir a ele posições. por exemplo.
<code> final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); position.leftMargin = 440; </code>
Então, atribua isso à sua opinião
<code> myView.setLayoutParams(position); </code>
Então, em resumo, você usa um objeto LayoutParams como uma interface para a posição da sua visão, em vez de acessar as coordenadas da visão diretamente, como eu assumi.