废话 本系列第7篇,终于讲到了绘制。...说到吃饭...呸,说到绘制,这在地图应用中是非常重要的一部分,很多时候我们集成地图SDK时,都不可能仅仅使用默认地图元素,在默认元素不能满足需求时,绘制就派上了用场。...这篇文章来记录下最简单的绘制点标记。 Marker和InfoWindow 点标记功能包含两大部分,一部分是点(俗称 Marker)、另一部分是浮于点上方的信息窗体(俗称 InfoWindow)。...总结 绘制是个大头,先开个简单的头,后面还有很多值得研究的点。本期节目就到这里,感谢大家的收看,我们下期再见~
废话 这篇文章记录下绘制面,绘制面其实就是绘制形状,形状有很多种,但是归纳起来我们只要两种,一是圆形,二是多边形。...(1)绘制圆形 CircleOptions circleOptions = new CircleOptions(); circleOptions .center(BEIJING)...(4)绘制多边形 PolygonOptions polygonOptions = new PolygonOptions(); polygonOptions...总结 这篇文章似乎也比较简单,一开始觉得绘制这块会比较难,难道是我们想复杂了吗。本期节目就到这里,感谢大家收看,我们下期再见~
废话 第7篇说过绘制一个Marker,如果我要绘制多个Marker呢,很简单调用多次就可以了。但是如果绘制的数量非常大呢?大到成千上万,甚至好几万,普通绘制Marker的方式就不合适了。...高德地图为我们提供了一个高性能的控件,可以绘制海量数据点。就是今天要说的MultiPointOverlay。...海量 多大的数量才叫海量呢,至少白酒一斤半吧,呸...官方的意思是10~10万,建议不要超过10万,不过基本上也不可能超过10万。这个功能从SDK5.1.0版本开始提供。...看了上面的演示,你可能就明白了,为什么高德能同时绘制10万个点,性能真高到这种程度吗?...总结 至此,我们基本讲完了高德地图绘制部分的内容,回头看看似乎也没多少。好吧,本期节目就到这里,感谢大家的收看,我们下期再见~
(1)模拟数据 要绘制热力图,我们要有大量的统计数据,作为demo,我们手动生成一段模拟数据来演示。...(3)绘制热力图 TileOverlayOptions tileOverlayOptions = new TileOverlayOptions(); tileOverlayOptions.tileProvider
废话 绘制线会比绘制点稍微复杂点,抛开一些复杂的属性不谈,主要分为三类:实线、虚线、纹理。绘制线在自定义地图中是非常重要的一个环节。...简单的api 看下api你会发现,绘制实线、虚线、纹理都是调用一个api:AMap.addPolyline(PolylineOptions);只是option设置的属性不同而已。...(1)绘制实线 polyline = aMap.addPolyline((new PolylineOptions()) .add(SHANGHAI, BEIJING, CHENGDU)....width(10) .setDottedLine(false) //关闭虚线 .color(Color.RED)); (2)绘制虚线 polyline...BEIJING, CHENGDU) .width(10) .setDottedLine(true) //打开虚线 .color(Color.BLUE)); (3)绘制纹理
Android自定义view流程,主要目的是总结实现过程中的思路以及一些需要注意的地方。...首先,我们先来看一张效果图: 实现逻辑 重新指定View宽高 绘制外圆圆弧背景及进度 绘制中圆圆弧背景及进度 绘制内圆圆弧背景及进度 知识点 onMeasure 用于测量View的大小。...heightMeasureSpec); int finalWidth = measureWidth; int finalHeight = measureHeight; // 根据自身宽高重新计算新的宽高...getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } } styes.xml...基础系列教程: Android基础课程U-小结_哔哩哔哩_bilibili Android基础课程UI-布局_哔哩哔哩_bilibili Android基础课程UI-控件_哔哩哔哩_bilibili Android
ViewGroup 继承自特定现有的View 如TextView 继承自特定现有的ViewGroup 如LinerLayout 我们先说继承自View和ViewGroup,这两种方式和后面两种相比 更接近于底层,可实现的...新建CircleView类继承自View,生成三个构造方法,至于每个构造方法有什么区别我在Android自定义View之绘制圆形头像 提到过,初始化画笔等操作都是基础操作,这里就不再赘述了,在onDraw...中绘制一个圆,半径为宽高中短边的一半。...接下里我们,设置宽高为wrap_content,运行效果图如下,我们可以看到效果和设置match_parent是一样的 ?...如何通过xml文件给自定义设置属性 上面例子中,绘制了一个红色的圆形,我们来通过xml属性配置绘制图形的颜色 以及 画笔的style吧 首先新建cycle_attr.xml文件 <?
首先根据view的宽高来确定圆心的位置,并画出一个圆。再通过view高度的一半减去圆的半径,确定刻度的起始位置,选择刻度的长度并绘制出来。然后再刻度下方绘制出数字。...最后是绘制指针,通过计算算出指针对应每个刻度的X,Y坐标并绘制直线。 ?..., numberPaint; // view 的宽高 private float mWidth, mHeight; // 圆的半径 private float circleRadius; // 圆心X,...布局(main.xml): <?...xml version="1.0" encoding="utf-8"?
绘制心形大致需要以下步骤: 绘制心形的左边半圆(使用函数addArc) 绘制心形的右边半圆(使用函数arcTo) 连接右边半圆到底角 连接左边半圆到底角 当然涉及到一些角度的计算,都很简单,不再过多解释...int x; private int y; //每次移动加速度 private int x_d = 1; private int y_d = 1; //画心的一半的横轴宽度...mPaint.setStrokeWidth(20); //设定画笔填充类型(不填充) mPaint.setStyle(Paint.Style.FILL); //获取控件的宽高...xml version="1.0" encoding="utf-8"?...(Path.FillType ft) 设置填充方式 Android界面刷新之invalidate与postInvalidate的区别 Android使用Canvas和Path自定义绘制动画
具体到实现上,则需开发者提供一个xml格式的矢量图形定义,然后系统根据矢量定义自动计算该图形的绘制区域。...取值0.5表示缩小一半,取值2.0表示放大一倍。 android:scaleY:指定分组对象在纵轴上的缩放比例。 android:translateX:指定分组对象在横轴上的平移距离。...android:trimPathEnd:指定几何路径到哪里结束绘制。取值为0.0到1.0,比如取值0.4表示只绘制前面十分之四的内容,后面十分之六不予绘制。...可缩放矢量图形SVG标记 前面说到,path标签的android:pathData属性,取值需符合SVG标准。...:trimPathStart和android:trimPathEnd,可实现矢量图形逐步展开或者逐步消失的动画效果。
性能优化:内存泄露 Android性能优化:内存优化 Android性能优化:Bitmap图片资源优化 Android性能优化:绘制优化 #目录 1....如何影响性能 布局影响Android性能的实质:页面的测量 & 绘制时间 1个页面通过递归 完成测量 & 绘制过程 = measure、layout 过程 3....优化思路 优化方向:布局性能、布局层级、布局复用性 和 测量 & 绘制时间 具体如下 针对 页面布局的性能、层级、测量绘制时间 进行优化,从而提高 Android应用中的页面显示速度 4....减少 布局层级 配合标签使用,可优化 加载布局文件时的资源消耗 具体使用 // 使用说明: // 1....& 等级(和测试发现 bug 很相似),可方便定位问题 & 按照严重程度进行解决 具体使用 Lint 使用指南 5.3 Systrace 简介 Android 4.1以上版本提供的性能数据采样
AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } } style.xml...:layout_width=""等,是系统的自定义属性; 在res下的values目录下新建一个attrs.xml文件: 【系统已经定义的属性,不能重新自定义(注意自定义属性的命名)】 <!...的时候是extends View去做的, 如果extends LinearLayout等ViewGroup、 且没有设置自定义TextView的background的话,【有background还是可以绘制...】 自定义TextView就无法正常绘制【不会调用onDraw()方法】; 由下面源码, // Step 3, draw the content if (!
http://idunnolol.com/android/drawables.html ---- ColorDrawable ColorDrawable 实际上是代表了单色可绘制区域,它包装了一种固定的颜色...,当ColorDrawable被绘制到画布的时候会使用颜色填充Paint,在画布上绘制一块单色的区域。...android:drawable 指定drawable资源,如果不设置该属性,也可以定义drawable类型的子标签 android:scaleHeight 设置可缩放的高度,用百分比表示,格式为XX%..., 0%表示不做任何缩放,50%表示只能缩放一半 android:scaleWidth 设置可缩放的宽度,用百分比表示,格式为XX%, 0%表示不做任何缩放,50%表示只能缩放一半 android...引用的位图资源,如果为空需要有一个Drawable类型的子节点 minlevel:level对应的最小值 maxlevel:level对应的最大值 通过shapeDrawable画圆,一式五份,改下宽高即可
在学习安卓群英传自定义控件章节的时候,有一个例子是绘制时钟,在实现了书上的例子后就想看这个时钟能不能动起来。...首先根据view的宽高来确定圆心的位置,并画出一个圆。再通过view高度的一半减去圆的半径,确定刻度的起始位置,选择刻度的长度并绘制出来。然后再刻度下方绘制出数字。...最后是绘制指针,通过计算算出指针对应每个刻度的X,Y坐标并绘制直线。 ?...clockView.startClock(); } @Override protected void onStop() { super.onStop(); clockView.stopClock(); } } xml...布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical
在onSurfaceCreated中为每个绘制器设置一个纹理ID。 在onSurfaceChanged中为每个绘制器设置显示区域宽高。 在onDrawFrame中,遍历所有绘制器,启动绘制。...接着,新建一个新页面,生成多个解码器和绘制器。 <?xml version="1.0" encoding="utf-8"?...为了方便查看,这里将整个VideoDrawer都贴出来(不想看的可跳过看下面增加的部分): class VideoDrawer : IDrawer { // 顶点坐标 private...分别记录对应的宽高缩放比。...xml version="1.0" encoding="utf-8"?
内部消耗掉了 padding 属性 4、cardElevation 设置阴影大小 5、cardUseCompatPadding 默认为false,用于5.0及以上,true则添加额外的 padding 绘制阴影...cardview控件内新增: app:cardCornerRadius="10dp" ---- ③在cardview控件内新增: app:contentPadding="10dp" 效果图:整体卡片的宽高都变大了...一半秀恩爱,一半扮感伤!不怕,还有慕课网陪你坚强地走下去!!")...message.getTitle()); viewHolder.mTvContent.setText(message.getContent()); return convertView; } /** * 内部类:可省去...以下 ---- 4、适配 通过上图对比: ① 5.0以下卡片之间的距离变大 cardUseCompatPadding 默认为false,用于5.0及以上,true则添加额外的 padding 绘制阴影
比如一个颜色形成的Drawable就没有内部宽和高。...ColorDrawable colorDrawable是最简单的Drawable,它实际上是代表了单色可绘制区域,它包装了一种固定的颜色,当ColorDrawable被绘制到画布的时候会使用颜色填充Paint...,在画布上绘制一块单色的区域。...我们可以使用不同的属性含义来绘制他,如Android:src,android.dither等。 <?xml version="1.0" encoding="utf-8"?...,按照顺序全部都绘制到画布上。
, Switch, ToggleButton 二、典型点击用法如下 Button是Android中一个非常简单的控件,在我们平时的项目中,可以说是非常的常见,使用率也是相当高。...三、按钮样式设置 每个按钮都使用系统的默认按钮背景进行样式化,如果您对默认按钮样式不满意,并且希望对其进行自定义以匹配应用程序的设计,那么您可以用可绘制的状态列表替换按钮的背景图像。...状态列表可绘制是在XML中定义的可绘制资源,它根据按钮的当前状态更改其图像。一旦定义了一个可以用XML绘制的状态列表,就可以将它应用到具有 android:background属性的按钮上。...,我这里命名为 bg_btn_normal.xml <?...,我这里命名为 bg_btn_press.xml <?
,它可以是一个xxx_shape.xml的布局文件,比如。...xml version="1.0" encoding="utf-8"?...<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:useLevel...也可以是 一个 图片(注意是xx.png,可包含透明像素,如) ?...CircleImageView的布局实际大小,为方形 mBorderRect.set(0, 0, getWidth(), getHeight()); //计算 圆形带边界部分(外圆)的最小半径,取mBorderRect的宽高减去一个边缘大小的一半的较小值
(View 的绘制流程是从 ViewRoot 的 performTraversals() 方法开始的,它经过 measure、layout、draw 三个流程最终才能将一个 View 完整的绘制出来。)...View的绘制经过了 measure、layout、draw 三个流程: measure:对应 onMeasure() 方法,测量View的宽、高。...为自定义 View 添加自定义属性 首先在 res/values 路径下创建一个xml文件,添加一个设置圆的颜色的属性: <?xml version="1.0" encoding="utf-8"?...xml version="1.0" encoding="utf-8"?...感兴趣的童鞋可自行动手试一试。 在上面代码中通知 View 重绘时使用了 invalidate() 方法,其实 postInvalidate() 也可以通知 View 重绘,那么这两者有什么区别呢?
领取专属 10元无门槛券
手把手带您无忧上云