如何正确地移动视图?(How to properly move a view?)

2019-06-23 14:49发布

可有人请给一个小白解释动画视图所以它的触摸区域和图像实际上一起移动的正确方法?

我已经阅读了大量的帖子和问题和教程,但没有解释什么是移动的布局和图像,这样我可以动画视图,然后让它在新的位置移动。

这是一个例子方法,我的工作,尝试许多不同的组合来没有成功。 该视图是在父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

不管我怎么努力,我遇到的问题。 在XML文件中设置时setFillAfter什么都不做。 编程设置,它留下的图像在正确的地方,但触摸控制保持在菜单了。 我曾尝试setLeft和setRight这显然只是移动图像,而不是视图位置,以及各种不同的布局选项,并填写,没有填充和无效而不得,但不能解决它。 我显然不undersatnd需要位置的底层机制和渲染视图! :d

谢谢。

编辑:解决方案

对于遇到类似问题的人,这是怎么了,我发现相对于布局工作。 创建具有指定大小的LayoutParams对象,然后你可以将其指定位置。 例如。

    final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);           
    position.leftMargin = 440;

然后分配给您的看法

    myView.setLayoutParams(position);

因此,在总结,你使用的LayoutParams对象为您的视图的位置的接口,而不是直接访问视图的坐标,因为我假设。

Answer 1:

你有什么是基本正常,有两个缺陷:

  1. 您正在使用setFillAfter()这是不是特别有用

  2. 您所呼叫layout()setRight()之类的东西,这不是特别有效

相反,在onAnimationEnd()您需要修改LayoutParams中的View ,以反映你想要的部件是在新的位置。一个小部件的大小和位置由布局决定规则它与它的容器协商。 最初,这些是通过您的布局XML资源设置。 通过修改LayoutParams在运行时,你所作出的修改这些规则。

什么那些LayoutParams是( LinearLayout.LayoutParamsRelativeLayout.LayoutParams等),什么样的价值观,你应该在他们指定,我们不能告诉你,因为我们不知道自己在做什么。



文章来源: How to properly move a view?