view是什么意思(你真的了解View吗?)
作为一名Android开发者,我在工作中肯定会或多或少的和自定义视图打交道。很多人提起自定义视图的之一反应是,“ *** ,那东西好难,修不好。去网上找找有没有类似的实现,拿去改。”
其实,我们之所以觉得定制View很难,根本原因是我们对View的基础没有牢牢把握。
今天,在这篇文章中,我将带你重新学习视图的基础知识。
视图的构造函数
1.视图(上下文)
在Java代码中新增时调用。
2.视图(上下文,属性集)
在中声明时调用。属性集是从。xml。
上面的layout_width,layout_height和src在哪里?Youyou XML来自哪里?他们不是空生产的;事实上,这些属性被明确声明为系统需要处理的东西。例如,src的定义如下:
每个declare-styleable生成一个R.styleable.[name],加上每个属性的R.styleable.[name]_[attribute]。例如,上面的代码生成R.styleable.ImageView和R.styleable.ImageView_src
这些资源是什么?R.styleable.[name]是所有属性资源的数组,系统使用它来查找属性值。每个R.styleable.[name]_[attribute]正好是这个数组的索引,可以一次性取出所有属性,然后按索引查询每个的值。
xml中的属性通过构造方法以attributesset的形式传递给视图,但通常我们不会直接使用attributesset。而是使用Theme.obtainStyledAttributes,这是因为原始属性通常需要引用和样式化。比如在XML中定义style=@style/MyStyle,这个方法首先获取MyStyle,然后混合它的属性。最后,获取样式属性返回一个类型尤优资源 *** 数组,您可以使用它来获取属性值。这个过程简化后,看起来是这样的:
public ImageView(Context context, AttributeSet attrs) {TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.ImageView, 0, 0);Drawable src = ta.getDrawable(R.styleable.ImageView_src);setImageDrawable(src);ta.recycle;}这里,我们将两个参数传递给获取样式属性。之一个参数是AttributeSet attrs,即xml中的属性;]第二个参数是R.styleable.ImageView数组,它告诉这个方法我们想要取哪个属性值。这里是指获取ImageView属性的值;第三和第四个参数是两个资源引用,defStyleAttr和defStyleRes,将在第三和第四个构造方法中解释。
当我们得到TypedArray时,我们可以得到单个属性。我们需要使用R.styleable.ImageView_src来正确索引数组中的src属性。
3.视图(上下文,属性集,
defStyleAttr)
DefStyleAttr参数:default Style,指其在当前应用或活动使用的主题中的默认样式。它为特定类型的视图定义了这个类的基本样式。如果在构造方法中没有指定我们的自定义样式,我们将使用Andoid系统的默认控件样式,需要通过theme间接指定,如下图:
1.在主题中设置样式(styles.xml)
@style/CustomStyle@android:color/black2.在施工方法中使用。
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.view, R.attr.mStyle, 0);4.视图(上下文,属性集,
defStyleAttr,defStyleRes)
DefStyleRes参数:它只是一个样式资源(@style/Widget。TextView)用于指定样式。比defStyleAttr简单,不需要间接通过theme。在API 21中增加。所以除非是21,否则不要用minSdkVersion。
它们串联在一起。如果你调用一个,所有的都会通过super调用。串联也意味着你只需要重写你需要的构造函数。一般来说,只需要实现前两个(一个用于代码,一个用于XML膨胀)。
视图结构
对于有多个视图的视图,结构是树形结构:最顶层是视图组,视图组下可能有多个视图组或视图,如下图所示:
注意:无论是测量过程、布局过程还是绘制过程,总是从视图树的根节点(即从树的顶部)开始,一层一层,一个分支一个分支地测量或计算(即树递归)。最后计算整个视图树中的所有视图,最终确定整个视图树的相关属性。
安卓坐标系
Android的坐标系定义为:
屏幕的左上角是坐标原点。
增加右X轴的方向。
增加向下Y轴的方向
具体数字如下:
视图位置(坐标)描述)
视图的位置由四个顶点决定(如下图A、B、C和D所示)
四个顶点的位置描述由四个值决定(视图的位置相对于父控件):
顶部:从子视图的上边界到父视图的上边界的距离。
左:从子视图的左边界到父视图的左边界的距离。
底部:从子视图底部边缘到父视图顶部边缘的距离。
右:从子视图右边界到父视图左边界的距离。
视图位置获取方法
视图的位置由view.getxxx函数获取(以Top为例):
// 获取Top位置public final int getTop {return mTop;}// 其余如下:getLeft;//获取子View左上角距父View左侧的距离getBottom; //获取子View右下角距父View顶部的距离getRight; //获取子View右下角距父View左侧的距离与get的区别...和getRaw...运动事件中
//get :触摸点相对于友优资源网其所在组件坐标系的坐标event.getX;event.getY;//getRaw :触摸点相对于屏认坐标系的坐标event.getRawX;event.getRawY;具体数字如下:
安卓的角度和弧度
角度和弧度都是描述角度的度量单位,区别如下:
在默认的屏幕坐标系中,角度增加方向是顺时针方向,与数学坐标系正好相反。
本文地址:百科常识频道 https://www.neebe.cn/changshi/941752.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!