首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
ConstraintLayout详解与使用方法,高德地图安卓端实现卫星地图路网功能
发布时间:2020-03-13 22:02
浏览次数:

ConstrainLayout 是 AndroidStudio2.2 的新特色,能够很有益的用于可视化开辟,有一点点雷同于 ios 的 storyboard,解决了 xml 过于复杂的主题素材。

  • 品类须要处境——绘制地块时须求体现卫星地形图,还要来得路网新闻
  • 高出的主题材料——如今高德地图只提供三种地图类型:AMap.MAP_TYPE_NORMAL 普通地图AMap.MAP_TYPE_SATELLITE 卫星地图后面一个提供了充裕的路网音讯和修造地方统一标准等信息,不过不能够满意大家的卫星地形图须求。

    图片 1普通地图——包蕴路网和建筑地方统一规范等消息

    后面一个除了卫星地形图之外不提供别的额外消息

    图片 2卫星地形图——毛都未有缓和方案——笔者尝试运用路况图层来体现路网新闻,不过意义比较糟糕,而且并不曾地方统一规范和别的标识音讯图片 3路况图层——呃。。。并不曾什么样卵用后来找到了缓和难题的极端方案,那还要感谢我们的其余八个要求。大家的门类供给中有多个是从用Google地图的图层举办遮罩,以减轻一些区域地图异常的小概呈现的主题材料,因为谷歌地图的隐讳区域和图纸新闻量是遥远超过高德地图的。大家接收的不二等秘书技是增加RemoteOverlay瓦片图层的情势实现。具体代码为:

OpenGL是多少个开花的图形库,可用于摄像、图片、图形管理,2D/3D游戏开拓,科学可视化,文学软件开辟,CAD,虚构实境,AI人工智能等世界。

那篇小说只是三个回顾自定义知识计算,浅谈自定义View。在就学自定义View以前大家先领悟一下多少个概念。

约束

OpenGL ES是OpenGL的子集,OpenGL ES即一个在运动平台上可见协助OpenGL最基本功用的简单标准。

一 ViewRoot,DecorView

ViewRoot是哪些? ViewRoot对应于ViewRootImpl类,看见了不菲人写的是viewtree的根节点,其实它跟View未有其余涉及,亦不是ViewTree的根节点,ViewTree的根节点往往是DecorView,DecorView的根是PhoneWindow,所以ViewRoot不是ViewTree的根节点,ViewRoot将DecorView attach到PhoneWindow上,连接WindowManager和DecorView的难题。

图片 4742015-20160507011816138-502436220 .png

相对稳固(Relative positioning)

也正是大家前面常用的relativelayout,属性也与其相符,使用方法如:layout_constraintLeft_toLeftOf,地点用一张图片表明。

图片 5

 void addRemoteOverlay() { final String url = "https://mt3.google.cn/maps/vt?lyrs=y@194&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d"; TileOverlayOptions tileOverlayOptions = new TileOverlayOptions().tileProvider(new UrlTileProvider { @Override public URL getTileUrl(int x, int y, int zoom) { try { return new URL(String.format(url, x, y, zoom)); } catch (Exception e) { e.printStackTrace(); } return null; } }); tileOverlayOptions.diskCacheEnabled .diskCacheDir("/storage/emulated/0/amap/OMCcache") .diskCacheSize .memoryCacheEnabled .memCacheSize .zIndex; googleTileOverlay = aMap.addTileOverlay(tileOverlayOptions); }

让大家看一下寻常的CPU与GPU交互作用流程:

二 View的绘图流程蕴涵

View的绘图流程是从ViewRoot的performTraversals方法开始,然后调用onmeasure,onlayout,ondraw最终绘制出来view。(此处不做深切研讨,今后会分析)

图片 6X)W_JJ7O57M%$E8F71_1NOA.png

边距

同在此之前的margin接受方法。

  • ###### goneMargin

    归纳的批注,正是当地方节制的指标可知性为View.Gone时,能够调动它的边距值变为与父构造的margin值。下文将有示范解释。

final String url = "https://mt3.google.cn/maps/vt?lyrs=y@194&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d";为瓦片图片模板格式,此中参数lyrs有三种档案的次序:lyrs=y为混合地图,s为卫星地图,m为普通地图。大家运用谷歌(Google卡塔尔地图的瓦片图层的时候暗中同意使用的是lyrs=s,也便是惯常的卫星图层,今后大家盼望包罗路网音讯,只须要设置lyrs=y就OK了。完美兑现!

图片 7CUP与GPU人机联作流程暗中提示图

performTraversals的职业流程

performTraversals会依次调用

  • performMeasure---->measure--->onMeasure---->从父容器传递到子View
  • performLayout ---->layout ---->onLayout--->从从父容器传递到子View
  • performDraw--->draw---->onDraw--->从父容器传递到子View
居中固定(Centering positioning)

通过定义上下左右的隔壁控件或父容器来设置居中。能够形象的明亮为多个分寸相似,方向相反的力功效在控件上。图片 8

日常来讲,通过定义top, bottom, start, end就足以使textview在parent居中体现。

<TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />

图片 9满含路网、地方统一标准消息的谷歌(GoogleState of Qatar卫星地形图——那才是大家想要的上述。文中涉及的绘图地块、图层遮罩、瓦片图层等技艺不在这里篇研究范围,如有兴趣请私信也许留言发问。以往有时机作者也会稳步把那些文化梳理出来,分享给大家。

CPU与GPU之间是无法一向相互影响的,需求经过内部存款和储蓄器区传递数据,速度超级慢,何况在内部存款和储蓄器复制进程中CPU和GPU为制止数据失实都无法操作此块内部存款和储蓄器,由此引致了所谓的“数据饥饿”。OpenGL为了升高渲染的性质,为多个内部存款和储蓄器区域间的数据调换定义了缓存。缓存是值GPU可以支配和治本的接连的RAM(Random-Access Memory。程序从CPU的内部存款和储蓄器复制数据到OpenGL ES的缓存。通过吞没内部存款和储蓄器,GPU能够尽可能以实用的点子读写内部存款和储蓄器。GPU把它处理多少的力量异步地接受在缓存上,意味着GPU使用缓存中的数据专门的工作的同一时候,运转在CPU中的程序能够继续履行。

三 Mearsure,Layout,Draw的干活流程

度量分为三种情景

  • view 的测量
  1. view的衡量是经过measure的主意来度量的
  2. measure方法调用了onMeasure方法,传入参数MeasureSpec,此中onMeasure方法对MeasureSpec进行拍卖
  3. onMeasure方法中调用了setMeasuredDimension(卡塔尔国方法去设置View的切实宽高值
  4. getDefaultSize(卡塔尔此方法传入MeasureSpec,由此来明确宽高。
  • ViewGroup的度量1.先遍历去调用全部子成分的measure方法,各类子成分再递归去推行这么些流程.
  1. ViewGroup结合本身的特色给出本身的measure值。这里有叁个要害的类须要解释那正是MeasureSpec
倾向

搭配bias,就如三个力大小不对等,使其往叁个趋势围拢。图片 10bias = 0.3

  • layout_constraintHorizontal_bias:水平偏侧

  • layout_constraintVertical_bias:垂直倾向

  • 0为最左上,1为最右下,默感觉0.5。

<转发时请注解“来自简书-EvenZhu”>

图片 11OpenGl对相互流程的优化暗意图

MeasureSpec

MeasureSpec代表三个叁九个人int值,高2位代表SpecMode,低31人代表SpecSize,SpecMode是指衡量方式,而specSize是指在某种度量方式下的尺度大小。在那之中SpecMode有多少个类

  • UNSPECIFIED

父容器不对View有其它约束,要多大给多大,这种景色日常用来系统之中,表示一种度量的状态。

  • EXACTLY

父容器已经衡量出View所需求的标准大小,这时View的最终大小正是SpecSize所钦命的值。它对应于LayoutParams中的match_parent(填充父成分,因为父成分的深浅是牢固的之所以也一定于是具体数值)和实际的数值那三种方式。

  • AT_MOST

父容器钦赐了一个可用大小即SpecSize,View大小不能逾越那些值,具体是什么样值要看分化View的实际实现。它对应于LayoutParams中的Wrap_content

用来分明子成分的职分,当ViewGroup的职位被鲜明后,它在onLayout中会遍历全数的子成分并调用自己的layout方法,在layout方法中onLayout方法会被调用。layout方法明显View自己的岗位,onLayout方法规会分明全部子成分的职分。

圆定位(Circular positioning)

可见为以三个控件为圆心,设定半径和角度,决定另二个控件的地点。如图图片 12

  • layout_constraintCircle : 参照的控件id

  • layout_constraintCircleRadius : 间距参照物的离开(两控件大旨点间隔离)

  • layout_constraintCircleAngle : 偏移角度(0为正上方,0~360)

图片软件中用来描述各类图片成分的函数,简单的说正是构成图像的主题单元。

这里有二个不是难题亟需解释一下便是:getMeasuredHeight(getMeasuredWidthState of Qatar,和getHeight的分别

友情链接:Android开拓之getMeasuredWidth和getWidth区别从源码深入分析

  1. getMeasuredWidth方法得到的值是setMeasuredDimension方法设置的值,它的值在measure方法运行后就能够规定

  2. getWidth方法获得是layout方法中传送的三个参数中的mRight-mLeft,它的值是在layout方法运转后鲜明的

  3. 貌似处境下在onLayout方法中利用getMeasuredWidth方法,而在除onLayout方法之外的地点用getWidth方法。

4.在大致具有的状态下都以特别的。

其一进度就比较轻巧了,正是基于上边的数额进行绘图到显示器上。

可知性行为(Visibility behavior)

这是对准View.GONE的一定管理。Gone掩瞒的控件,会被当成四个点,同有的时候候忽视margin。如图。

图片 13

  • 当A消失时,B的边距将为原来与A的牢笼边距。

  • 另一种艺术,用goneMargin生成新的边距,而原先与A的束缚边距将不起效用。

  • 这种特定的行为能够达成非常的布局,比方上海体育场面A消失时B地点不改变,设A宽度为100,边距为10,B对A限定为20,那么goneMargin=100+10+20=130,则足以兑现A蒙蔽后B地点不改变。

通俗来讲叫渲染流水生产线:展现晶片内处图片信号相互独立的并行处理单元,不问可以见到便是一多元有序的拍卖阶段的行列,用于把大家应用中的数据转载到OpenGL生成多个终极图像的经过。

尺寸限定(Dimensions constraints)
  • 能够定义ConstraintLayout布局的尺寸

  • 能够定义控件的尺寸,有两种艺术:

    1. 规定尺寸:123dp
    1. WRAP_CONTENT

    2. 0dp

  • 0dp,相当于match_constraint,意思就是填满限制的空中。若是设置了margin值,也亟需去掉margin的空间。

图片 14OpenGL渲染流水线含蓄表示图

比例
  • 能够按百分比设置控件的宽高,定义个中二个维度为0dp,并安装属性layout_constraintDimensionRatio,值可以为0~1的浮点数或比例x:x。

  • 能够设置八个维度均为0dp,同偶然间在ratio值前加W或H分别节制宽度或可观。

 <Button android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintDimensionRatio="H,16:9" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"/>
  • 如上,将以button的最大封锁宽度,16:9的比例定义button的冲天

#version 330 code//版本

链条
  • 将三个维度的一组控件组成贰个链子,另三维能够独立主宰,相当于绑成三个零器件。

  • 一组零件通过双向连接就形成三个链条。图片 15

  • 水平链的最侧边和竖直链的最上部成为链头。图片 16
  • 设若连接中安装了margin,要盘算在内。

  • 链条样式(Chain Style)

    给链条第叁个成分设置属性layout_constraintHorizontal_chainStylelayout_constraintVertical_chainStyle,则链条会根据样式改善。(私下认可CHAIN_SPREAD

    图片 17

    • spread:成分间分散开

    • spread_inside:端点除却,成分间分散开,如上海教室分化

    • packed:成分间打包,即贴在一齐

  • 权重链(Weighted chains)

    类似LinearLayout里的WEIGHT质量,若成分使用MATCH_CONSTRAINT,便是这么些要素运用约束后的长空。

    • layout_constraintHorizontal_weight

    • layout_constraintVertical_weight

ConstraintLayout详解与使用方法,高德地图安卓端实现卫星地图路网功能。in vec4 vPosition; //in:输入 vec4:向量 vPosition 变量名

诬捏帮衬成分(Virtual Helper objects)

能够行使匡助对象来成立相对节制,能够透过水平或垂直的Guideline来稳固控件。

  • Guideline

    • 不会被展现,只会援救布局

    • 定位Guideline有二种办法:

      layout_constraintGuide_begin:间隔左侧或顶上部分的稳固间隔

      layout_constraintGuide_end:间隔左边或底层的原则性间距

      layout_constraintGuide_percent:父控件的冲天或宽度的比例

in vec4 vColor;

可视化操作

//Unifrom的效能:从宿主语言中通过OpenGl的函数给GLSL传值

自律控键类型

图片 18

  • 调动尺寸大小:圆柱形四角

  • 左边节制:四边圆形,约束四边的职位

  • 基线限制:文字下方条状,用于对齐文字

Unifrom mat4 ModelViewProjectionMatrix;

加多封锁
  • 点击控键,选中圆点拖动到要节制的职位。如图,要将控件放于左上角,将左臂和下边分别拉到荧屏边缘就可以。

图片 19

  • 八个控件间增加限定,要将第二个textview放于第叁个的尘寰,只供给将左边手节制对齐,上面节制到第2个textview的下方即可。要稳重的是,增添完约束后,会有一个默许margin值,引致侧面没对齐,那时候在侧面的Attributes元帅margin调为0就能够。

图片 20

void main(){

除去限制
  • 删除单个节制:点击具体的限制发源点就能够删除。

    图片 21

  • 除去单个控件的有着限定:点击控件,在左下方有删除全数节制的按键,点击即可。

图片 22

  • 去除全部分界面包车型客车保有节制:在上面工具栏找到图片 23

    开关就可以删除。

glPosition=modelViewProjectionMatrix*vPosition;

Inspector的使用

图片 24

以此分界面就是控件的属性。大家除了能够改正部分中坚质量,还应该有部分新的功用。

  • 校正尺寸

    图片 25

    此处有二种尺寸描述格局:

    • 图片 26

      :wrap_content

    • 图片 27

      :固定数值

    • 图片 28

      :match_constraint

    至于那八个属性的差别上边已经表达过,大家看动图能够考查出分裂。

  • 调整bias

    图片 29

    滑动这一个滑块调度就能够。

  • 使用guideline

    能够使用guideline举办百分比结构,再不用操心适配难点了。

    图片 30

  • 机关抬高度约束

    在上面包车型地铁工具栏找到图片 31

    ,就能够开启AutoConnect,尽管有的时候也许还是无法达成你想要的架构,但超过八分之四时候能够缓和你的职业量。

}

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有