【问题标题】:Interchange location of two views两个视图的交换位置
【发布时间】:2012-07-13 03:19:40
【问题描述】:

在我的活动中有两个视图。两者都在不同的父母。我有他们相对于屏幕的坐标。如何互换两个视图的位置?

【问题讨论】:

    标签: android


    【解决方案1】:

    您需要为两个视图调用父 ViewGroup 方法 removeView(),然后调用 addView() 将它们添加回来,但要交换一下。

    所以如果你的父视图被称为 mommy 和 daddy,一个有一个孩子叫 foo,另一个有一个孩子叫 bar:

    ViewGroup daddy = (ViewGroup)findViewById(R.id.daddy);
    ViewGroup mommy = (ViewGroup)findViewById(R.id.mommy);
    
    View foo = findViewById(R.id.foo);
    View bar = findViewById(R.id.bar);
    
    //detach children
    
    daddy.removeView(foo);
    mommy.removeView(bar);
    
    //re-attach children
    
    daddy.addView(bar);
    mommy.addView(foo);
    

    阅读ViewGroup 的参考资料,了解有关 removeView 和 addView 方法的更多信息,并查看其他可用方法。

    【讨论】:

    • 我不知道视图组的 ID。如何获取视图的视图组?
    • 您可以在子视图上使用视图 getParent 方法
    • 每个父级都有两个以上的视图,因此不会发生精确的交换。
    • 您可以使用其他版本,addView(View child, int index) 指定将子代添加到父代的位置
    • 如果你需要找到一个孩子的原始位置,你可以在它的父母上调用indexOfChild(View child)添加到前面的评论。这都是我链接到的文档。
    【解决方案2】:

    试试这个:

    int x1 = view1.getX();
    int y1 = view1.getY();
    
    view1.setX(view2.getX());
    view1.setY(view2.getY());
    view2.setX(x1);
    view2.setY(y1);
    

    您还可以考虑使用动画效果使其看起来更漂亮。

    【讨论】:

    • 梅林是对的,我错过了关于他们属于不同父母的部分
    • setX 自 API 11 起可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多