有人可以向菜鸟解释动画视图的正确方法,以便它的触摸区域和图像实际上一起移动吗?!
我已经阅读了很多帖子、问题和教程,但没有人解释什么会移动布局以及什么会移动图像,以便我可以为视图设置动画,然后将其保留在新位置。
这是我正在使用的示例方法,尝试了许多不同的组合都没有成功。该视图位于父级 RelativeLayout 中。它是一个可触摸的图标菜单,并通过单击以滑出屏幕时使用 xml 资源进行动画处理,只留下一个小选项卡显示,它需要一直停留到再次单击。
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
无论我尝试什么,我都会遇到问题。setFillAfter 在 xml 文件中设置时不执行任何操作。以编程方式设置,它将图像留在正确的位置,但触摸控件仍保留在菜单所在的位置。我尝试过 setLeft 和 setRight ,它们显然只移动图像,而不是视图位置,以及各种不同的布局选项,填充和不填充和无效,但无法解决。我显然不了解定位和渲染视图所需的基础机制!:D
谢谢。
编辑:解决方案
对于任何有类似问题的人,这就是我发现使用相对布局的方式。您创建一个具有指定大小的 LayoutParams 对象,然后您可以为其分配位置。例如。
final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
position.leftMargin = 440;
然后将其分配给您的视图
myView.setLayoutParams(position);
所以总而言之,您使用 LayoutParams 对象作为视图位置的接口,而不是像我假设的那样直接访问视图的坐标。