我希望调整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;
}
非常感谢任何形式的帮助。 感谢。