赞
踩
View
的位置ViewGroup
,则回调子节点布局过程只有布局过程执行完毕,获取View
的宽高才是准确的
Frame
布局过程需要确定出View
的位置与宽高属性,那么整个这些属性通过Frame
来描述。
一个View
(ViewGroup
)的宽高和位置信息到底是怎么描述的呢?在Android
的位置系统中,通过Frame
来表示:
也就是说,一个Frame
包含了四个对应的属性:
left (mLeft)
top (mTop)
right (mRight)
bottom (mBottom)
根据这四个属性,就可以确定出View
的位置信息与View
的宽高信息。
view的高 = bottom - top
view的宽 = right - left
view的位置 = (left, top)
在View
中上面的说到的属性都是hide
标记的,也就是说子类是看不到的,那么如何获取这些值呢?
view.getLeft();
view.getTop();
view.getRight();
view.getBottom();
// 注意以下值是以px为单位的,如果设置的是dp,需要作出转换。
view.setLeft(xxx);
view.setTop(xxx);
view.setRight(xxx);
view.setBottom(xxx);
onLayout
,简单实现FloatingButton
此为简易版,仅仅是为了探讨layout
过程的,最好不要用于实际开发。
在onLayout
时,将View
的位置固定在一个固定的位置,不随布局改变而改变
avtivity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.ung8023.androidbase.view.define.LayoutActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="@color/colorPrimary"
/>
<com.ung8023.androidbase.view.define.CustomFloatingView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginLeft="20dp"
android:background="@color/colorAccent"
/>
</LinearLayout>
CustomFloatingView.java
public class CustomFloatingView extends View {
public CustomFloatingView(Context context) {
super(context);
}
public CustomFloatingView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomFloatingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
int width = getWidth();
int height = getHeight();
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
setLeft(layoutParams.leftMargin);
setTop(400);
setRight(width + layoutParams.leftMargin);
setBottom(400 + layoutParams.topMargin + height);
}
}
我使用的装备:程序员必备 | 不伤关节 | 手感好 | 静电容 | Plum键盘|Niz键盘 戳我
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。