Relativelayout子视图被包围在中心的可移动锚点

时间:2014-04-18 13:04:56

标签: android relativelayout

我希望调整relativelayout子视图w.r.t放置在中心的锚视图。 所以基本上我有四个视图,其中一个角落锚定到父边缘,另一个角落锚定到中心视图。我已成功完成此操作,但这次锚点视图(中心视图)基于触摸移动动态定位。

预期结果是子视图应根据锚视图位置调整自身大小。 相反,只有一个子视图可见,它按预期调整大小,而其他子视图根本不可见。

以下是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >

 <Button
    android:id="@+id/viewBottom"
    android:background="#ffff00"
    android:text="test"
    android:layout_below="@+id/dragView"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@+id/dragView"
    android:layout_width="100dp"
    android:layout_height="100dp" />

 <View
     android:id="@+id/viewTop"
     android:layout_width="100dp"
     android:layout_height="100dp"
     android:layout_alignParentRight="true"
     android:layout_alignParentTop="true"
     android:layout_toRightOf="@+id/dragView"
     android:layout_above="@+id/dragView"
     android:background="#00ff00" />

 <Button
     android:id="@+id/dragView"
     android:layout_width="100dp"
     android:layout_height="100dp"
     android:layout_centerInParent="true"
     android:background="#0000ff" />

我的创建代码:

setContentView(R.layout.activity_main);

    container = (RelativeLayout)findViewById(R.id.container);
    dragView = (View)findViewById(R.id.dragView);
    viewTop = (View)findViewById(R.id.viewTop);

    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)dragView.getLayoutParams();
    layoutParams.width = 100;
    layoutParams.height = 100;
    layoutParams.leftMargin = 50;
    layoutParams.topMargin = 50;
    dragView.setLayoutParams(layoutParams);

    dragView.setOnTouchListener(this);

Ontouch代码移动锚点视图

public boolean onTouch(View view, MotionEvent event) {
    final int X = (int) event.getRawX();
    final int Y = (int) event.getRawY();
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
            _xDelta = X - lParams.leftMargin;
            _yDelta = Y - lParams.topMargin;
            break;
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
            layoutParams.leftMargin = X - _xDelta;
            layoutParams.topMargin = Y - _yDelta;
            view.setLayoutParams(layoutParams);

            break;
    }

    return true;
}

非常感谢任何形式的帮助。 感谢。

0 个答案:

没有答案