我创建了这些视图>>> □口□
<View
android:id="@+id/a"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@color/opaque_red" />
<View
android:id="@+id/b"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignBottom="@id/a"
android:layout_toRightOf="@id/a"
android:background="@color/opaque_red" />
<View
android:id="@+id/c"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignBottom="@id/a"
android:layout_toLeftOf="@id/a"
android:background="@color/opaque_red" />
然后我让a
可以在屏幕内移动
// v is whole screen
a=v.findViewById(R.id.a);
a.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_MOVE || motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
int x = (int) motionEvent.getRawX();
int y = (int) motionEvent.getRawY();
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) a.getLayoutParams();
// calculate x y should set to a, int[0] is x, int[1] is y
int[] xy=centerPointToLeftTop(x,y,a.getMeasuredWidth(),a.getMeasuredHeight());
// limit the a inside the screen. b and c just follow the a, they can go to outside of screen
if(xy[0]<0) {
params.leftMargin = 0;
} else if (xy[0] > v.getMeasuredWidth()- a.getMeasuredWidth()){
params.leftMargin=v.getMeasuredWidth()-a.getMeasuredWidth();
} else {
params.leftMargin = xy[0];
}
a.setLayoutParams(params);
v.invalidate();
}
return true;
}
});
保证金是改变Android视图位置的唯一方法
但边距也会影响两个视图之间的对齐,因此c
视图(左方框)不会跟随a
视图
如何在没有边距的情况下对齐视图?或者是否有其他方法可以在不改变边距的情况下移动视图?
答案 0 :(得分:0)
删除
android:layout_alignBottom="@id/a"
android:layout_toLeftOf="@id/a"
从视图c。因为这些行会通知android如果移动我们还需要移动c。因此,删除这些行并添加任何将视图与窗口相关的属性,而不是元素a。