首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android中的各种Drawable类详解

上面的几个属性的设置都会激发onXXXX系列方法来让派生类在属性值发生变化时进行更新处理,而有时候我们希望一些更新逻辑不是在派生类中处理,而是在持有Drawable对象的对象上或者委托给外部进行处理,因此可以调用如下方法...BitmapDrawable 位图可绘制类 位图可绘制类。在构造时指定一个Bitmap对象或者一个位图文件。位图显示时需要指定:像素和设备尺寸的映射,显示的位置,显示模式三种属性。...因为位图里面的像素是一个抽象的概念他没有具体的物理尺寸,而设备的像素则是物理的,他有大小。因此需要有一个方法来指定位图像素转化为物理像素的映射关系,这样位图的像素才可以真正的显示在设备上。...也就是说构造函数中的stdWidth, stdHeight是绘制path时设定的高度和宽度。因此在绘制时到具体的高度和宽度则要进行放大或者缩小。 RectShape 矩形。...那么当我们调用setLevel(80)时,系统将会显示a。 StateListDrawable 不同状态下显示可绘制类 这是一个容器可绘制类。用于在不同的状态下显示不同的可绘制对象的情景。

1.6K20

2014-11-6Android学习------Android 仿真翻页效果实现--------贝塞尔曲线(二)

路径 等相关变量 private Bitmap mBitmap;//打开界面时的视图,上面的三个位图都是在这个初始的位图上绘制出来 private Canvas mCanvas;//画布 private...mCanvas, mNextPageBitmap);//在绿色位图上画对阴影效果 drawCurrentPageShadow(mCanvas);//黄色位图上也有阴影效果 canvas.drawBitmap...(mBitmap, 0, 0, mBitmapPaint);//在默认设置的位图上画上设计的位图 } 2.如何去确定坐标呢?...这里稍微解释一下, 当我们对画布进行旋转,缩放,平移等操作的时候其实我们是想对特定的元素进行操作,比如图片,一个矩形等,但是当你用canvas的方法来进行这些操作的时候,其实是对整个画布进行了操作,...那么之后在画布上的元素都会受到影响,所以我们在操作之前调用canvas.save()来保存画布当前的状态,当操作之后取出之前保存过的状态,这样就不会对其他的元素进行影响 2))画出绿色部分的贝塞尔曲线以及阴影的效果

1.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    游戏性能优化指南:如何将HTML5性能发挥到极致

    将滤镜(BlurFilter和GlowFilter)应用于显示对象时,运行时将在内存中创建两张位图。其中每个位图的大小与显示对象相同。...应用滤镜时内存中的两个位图 当修改滤镜的某个属性或者显示对象时,内存中的两个位图都将更新以创建生成的位图,这两个位图可能会占用大量内存。...当值为"normal"时,Canvas下进行画布缓存,webgl模式下进行命令缓存。 3....此时FPS显示30,并且在鼠标移动时,可以感觉到圆球位置的更新不连贯。...减少粒子使用数量,在移动平台Canvas模式下,尽量不用粒子; 2. 在Canvas模式下,尽量减少旋转,缩放,alpha等属性的使用,这些属性会对性能产生消耗。(在WebGL模式可以使用); 3.

    3.2K61

    《Android游戏编程之从零开始》笔记「建议收藏」

    (Color.BLACK); 第三种 每次绘图之前,指定RGB来填充画布 canvas.drawRGB(0,0,0); 第四种 每次绘图之前,绘制一张等同于屏幕大小的图片覆盖在画布上...6.SurfaceView视图添加线程 固定时间刷新画布比如倒计时、动态花草、流水、怪物、钱币等。 设计一个线程不停去重绘画布,实时更新游戏元素状态。...,通过此位图得到一个Canvas实例,利用得到的画布进行绘制, 绘制的图形都保存在最初创建的位图上。...最后只要利用游戏主画布绘制这张位图即可。...质量density:当物体质量设置为0时,物体视为静态物体,没有外力不会发生运动的物体。 摩擦力friction:取值通常设置0~1之间,0没有摩擦,1最强摩擦。

    1.3K21

    我做了一个在线白板!!!

    当我们鼠标在画布世界按下时就决定了矩形出生的地方,所以我们需要记录一下这个位置: let mousedownX = 0; let mousedownY = 0; let isMousedown = false...,不过别急,在修理之前我们还要做一件事,那就是得要知道我们鼠标具体在哪个操作手柄上,当我们激活一个矩形,它会显示激活态,然后再当我们按住了激活态的某个部位进行拖动时进行具体的修理操作,比如按住了中间的大虚线框里面则进行移动操作...矩形旋转后会发现一个问题,我们明明鼠标点击在进行的边框上,但是却无法激活它,矩形想摆脱我们的控制?...它想太多,原因其实很简单: 虚线是矩形没有旋转时的位置,我们点击在了旋转后的边框上,但是我们的点击检测是以矩形没有旋转时进行的,因为矩形虽然旋转了,但是本质上它的x、y坐标并没有变,知道了原因解决就很简单了...导出图片不能简单的直接把画布导出就行了,因为当我们滚动或放大后,矩形也许都在画布外了,或者只有一个小矩形,而我们把整个画布都导出了也属实没有必要,我们可以先计算出所有矩形的公共外包围框,然后另外创建一个这么大的画布

    3.6K31

    JavaScript 编程精解 中文第三版 十七、在画布上绘图

    你可以在 HTML 文档中嵌入 SVG,还可以在标签中引用它。 我们将第二种方法称为画布(canvas)。画布是一个能够封装图片的 DOM 元素。...由于我们没有明确的方法,来找出我们希望绘制图形所对应的控制点,所以这种曲线还是很难操控。有时候你可以通过计算得到他们,而有时候你只能通过不断的尝试来找到合适的值。...因为画布上的形状只是像素,所以在我们绘制它们之后,没有什么好方法来移动它们(或将它们移除)。 更新画布显示的唯一方法,是清除它并重新绘制场景。 我们也可能发生了滚动,这要求背景处于不同的位置。...选择图像接口 所以当你需要在浏览器中绘图时,你都可以选择纯粹的 HTML、SVG 或画布。...在一个画布上展示动画时,clearRect方法可以用来在重绘之前清除画布的某一部分。 习题 形状 编写一个程序,在画布上画出下面的图形。

    3.8K30

    Sketch 94 mac,草图94中文最新版支持M1,支持macOS Ventura 13

    有什么改进:将形状转换为轮廓时,我们将尊重任何非边框元素,例如填充或阴影。您现在可以通过按住⌘并拖动调整大小手柄来旋转线条,就像您可以使用其他图层一样。您现在可以直接在画布上编辑符号中的文本层。...如果您在颜色弹出框中键入新的颜色值,则现在在您单击其他位置以关闭弹出框时应用这些值。我们更新了选择框的设计。它现在使用应用程序的强调色,更容易看到选定的图层(特别是在选择多个形状和画板时)。...修复了在选择色调或调整颜色变量时可能发生的崩溃。修复了将形状转换为轮廓有时会在画布上稍微移动它或移除其旋转或翻转的错误。当您悬停或拖动线层的调整大小手柄时,您现在将看到一个工具提示及其长度。...如果在将鼠标悬停在手柄上时按住 ⌘ 键,您将看到线条的角度。我们修复了在插入或复制粘贴位图后关闭文档时会发生的内存泄漏。修复了无法通过拖动未填充区域来移动带有边框但没有填充的选定形状的问题。...修复了颜色弹出框内的弹出按钮标签不会出现在 macOS Ventura Beta 中的问题。修复了使用选定的画板将图像拖放到画布上会忽略您放置它的位置的问题。

    11K70

    利用 Canvas API 实现正方验证码的识别与自动填充

    验证码的字符经过了随机的旋转,有时候会出现粘连的状况,有时候却不会,如何应对这种变化情况,在发生粘连时将粘连字符分开,成为了一个挡在眼前的问题。...标准化的思路很简单,只要把所有的字符都旋转到一个固定角度就好了。 这里便扯到了位图的变换的知识,大一时懵懵懂懂地学了一点儿线性代数,很自然地联想到线性代数里面关于线性变换的内容。...类型的对象),并将旋转后的点略微平移了一下,再调用 removeBlank 方法去除掉了“画布”中没用的空白部分,只留下旋转后的字符: // 绕中心点旋转一定角度,返回一个旋转后的GrayImage...参考《常见验证码的弱点与验证码识别》,这里也使用了里面的思路:通过从逆时针25度到顺时针25度依次的旋转,在每次旋转中获得旋转后图形的宽度,取宽度最小的字符作为最终结果返回。...为了减小性能损失,这里的步进值是2度(在实际的测试中,对于 Chromium 的 V8 引擎来说,这种事情对于它的性能并没有多大的影响): // 获得标准化字符(把歪了的字符转回来) GrayImage.prototype.normalize

    1K20

    ​canvas 高级功能(上)

    在画布中,绘图状态指的是描述某一时刻2D渲染上下文外观的整套属性,从简单的颜色值到复杂的变换矩阵(transformation matrix)及其他特性。...在本文中,你将学习到大多数我们尚未接触过的属性。 有一点很重要,画布上的当前路径和当前位图(正在显示的内容)并不属于状态。...在画布中进行平移使用的是translate方法时,实际上它移动的是2D渲染上下文的坐标原点,而不是所绘制的对象。...因此,你所绘制的正方形本身是不会旋转的,它现在实际上是以45度角绘制到画布中。 当然,如果你只想旋转所要绘制的图形,那么这样肯定不行。这时,仍然还需要使用translate方法。...例如,如果在执行平移之前将画布旋转45度,那么你会在45度角上进行平移。所以如果绘图时出现错误,那么请先检查顺序!

    2K20

    Rnote:Star 8.6k,github上的宝藏项目,手绘与手写画图笔记,用它画图做笔记超丝滑,值得尝试!

    它支持草图绘制、手写笔记以及对文档和图片进行注释。Rnote提供了PDF和图片的导入导出功能、无限画布以及适应不同屏幕尺寸的UI界面。...可以在Flatseal(Flahub权限管理器)中授权。 当前文件位置奇怪:当标题栏中显示的目录类似于/run/user/1000/../时,Rnote可能没有权限访问该目录。...同样,在Flatseal中授权可以解决这个问题。...(讨论见#329) 手写笔按钮快捷方式映射不符合预期:在某些设备上,一个手写笔按钮被映射到专用的“橡皮擦”模式。在快捷方式设置中的按钮可能会不一致(次要/上按钮实际上是主要/下按钮,或相反)。...要更改映射到此“橡皮擦”模式的工具,请按照以下步骤操作: 将手写笔悬停在画布上,并按住被怀疑映射到“橡皮擦”模式的按钮在按住按钮的同时切换到所需的笔样式释放按钮时,它应该切换回之前的笔样式“橡皮擦”模式中的笔样式现在应该被记住字体

    5800

    高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染

    结构生成一棵RenderObjectTree,但浏览器并没有直接使用它来生成一张位图画面,因为如果这样做的话,页面上发生任何变化时,都需要重新计算变更的区域并更新缓存,它的确很节省空间,毕竟只需要缓存一张静态图片中各个像素点的颜色数据就可以了...不分层的情况 在canvas中,使用context.getImageData(x, y, width, height)方法取得画布上对应矩形区域的像素数据,在不分层的情况下,假设第一次渲染后,使用这个方法将画布中的像素数据取出来存储在...假设在上面的画面中,人物的大小是100*100,缓存的像素中,其位置是(200,400),假设一帧中它平移了10个像素,那么就可以粗略地认为需要更新的区域是左上角为(200,400),宽110,高100...分层绘制 单幅位图像素缓存的劣势其实已经很明显了,下面再来看看分层的情况,假如上述画面中的对象分别绘制在不同的canvas画布上,那么一共就需要5个canvas元素,由于画布是透明底色的,所以最终显示结果是叠加而成的...1/3的空间(3张位图变1张了),但对于后续的重绘却不会造成影响,这样就可以省掉很大一部分确定没有用的缓存。

    1.5K30

    使用Three.js构建基础3D场景 | 《Three.js零基础直通03》

    scene.add(mesh) 请牢记,如果我们只是创建了3D对象,但没有把它添加到场景中的话,是看不见的。...相机Camera 相机虽然也是一种3D对象,并且需要添加到场景中,但它本身是不可见的。当我们对3D场景进行渲染时,渲染器将从相机所在的角度来看。...在实例化这个对象时,我们需要提供两个基本参数。 FOV(视场) 视场就是相机的可视角度,你一定听过广角镜头对不对。当我们使用广角镜头去拍摄时,画面里能装的东西虽然非常多,但是边缘会有很大的失真变形。...方法,并将场景和相机作为参数: renderer.render(scene, camera) 似乎有点问题,什么都没有呢。这个问题恰好帮我们更好的理解三维世界的运行机制。...不用担心,在接下来的课程中,我们将学习更多关于位置、旋转和缩放属性的用法,以及如何为它们设置动画。那个时候,它们会看上去非常“立方体”。

    5.7K40

    前端canvas基础复习,canvas学习笔记,持续记录

    Canvas基础 1.介绍 Canvas API(画布)是在HTML5中新增的标签用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap)。...该元素可以使用CSS来定义大小,但在绘制时图像会伸缩以适应它的框架尺寸:如果 CSS 的尺寸与初始画布的比例不一致,它会出现扭曲。...当一个状态值没有被改变时,Canvas 就会一直使用最初的值。当一个状态值被改变时,我们分两种情况考虑。 如果使用 beginPath()开始一个新的路径,则不同路径使用不同的值。...3.不要在用drawImage时缩放图像 在离屏 canvas 中缓存图片的不同尺寸,而不要用drawImage()去缩放它们。...移动物体:在鼠标移动(mousemove)中,更新物体坐标为鼠标坐标。 松开物体:在鼠标松开(mouseup)时,移除 mouseup 事件(自身事件也得移除)和 mousemove 事件。

    2.4K40

    《译 SFML Essentials 英文版》—— 《第一章》 SFML 入门

    回到我们的游戏循环的例子,它目前没有执行它应该执行的事情,如果我们尝试运行代码,很明显窗口不响应输入,这是因为我们没有执行循环处理输入的三个重要步骤中的第一个步骤 ( 处理输入)。...它只在内部发生错误时返回false(某种类型的错误或异常),否则总是返回true. 当我们要求用户在应用程序继续运行之前执行某些操作时,或者如果我们想在另一个线程上处理输入时,这是非常有用的....它的工作原理很简单 —— 画布中有两面可以使用。在渲染一帧中我们只使用其中一面 — 即没有在屏幕上显示的那一面。在当前帧渲染完成后,我们翻转画布以把已经有渲染结果的这一面显示到屏幕上。...下一帧我们就渲染到画布的另一面,如此反复。双缓存画布技术让我们可以在渲染完成后才显示渲染结果。在sfml中 我们通过调用Windows display() 来显式画布。...在每一帧中,我们将正方形旋转1.5度并向右移动1个像素。

    3.1K30

    图形编辑器开发:自定义光标

    光标(游标)在图形界面交互中是非常基础的一环。 它是一个指针,悬浮在屏幕的最上层。除了可以标记出指针的当前位置,同时也会通过它独特的样式,提示用户此时可以执行怎么的操作。...我们还需要一些 更具体的光标样式来向用户传递信息,比如: 旋转光标:表示图形可旋转。cursor 属性中没有旋转光标,勉强可用抓手工具做个平替; 支持任意度数的缩放光标。...图片有位图的,也有矢量的啊,我们可以用一种叫做 SVG 的特殊图片格式,它的内容是文本,一种的 xml 文本。...考虑到性能,建议把光标放到另一个 canvas 上,和图形放一个 canvas 会让画布中没做任何操作的图形频繁重绘。 结尾 总结一下。...但其中有一些比较特殊的有各种旋转方向的光标,需要做特别的处理。一种是用工具批量生产光标图片,一种是利用 svg 在运行时动态生成; 最后是在画布上渲染光标的方案,适合一些有特殊需求的图形编辑器。

    33020

    了解 Android 的矢量图片格式:`VectorDrawable`

    因此,对于固定分辨率的位图,我们只了解每个像素的颜色,却不理解其中包含的内容。然而,矢量图像是通过在抽象大小的画布上定义一系列形状来描绘图像。 为什么使用矢量图?...对于插图,矢量是很好的选择 我们无法用 VectorDrawable 替换它,因为当时没有广泛支持渐变(现在已经支持),所以我们不得不发布一个位图版本 ?。...由于格式的性质,矢量在在描述一些矢量资源(如简单图标等)时 非常有用。它们在编码摄影类型图像时非常糟糕,因为这种图像内容很难被描述为一系列形状的组合。位图格式(如 webp)此时会更有效率。...第二个 视口 大小定义虚拟画布,或者定义所有后续绘制命令的空间坐标。固有和视口尺寸可以不同(但应该以相同的比例)— 如果你需要,可以在 1*1 画布中定义矢量。...遮罩可以帮助创建有趣的效果(特别是在动画时),但它成本相对较高,所以你需要以不同的方式绘制形状来避免它。 路径可以修剪;这只是绘制整个路径的一个子集。你可以修剪填充的路径,但结果可能会令人惊讶!

    2.5K30

    android学习笔记----关于图形的基本处理讲解

    参数 bitmap Bitmap:要绘制的位图 这个值绝不能是null. matrix Matrix:用于在绘制位图时转换位图的矩阵。 这个值绝不能是null. paint Paint:可能为空。...注意:并非所有Formats都直接支持所有位图配置,因此BitmapFactory返回的位图可能位于不同的bitdepth中,和/或可能丢失了每像素alpha(例如,JPEG仅支持不透明像素)。...,当我们提供多个版本的资源时,应用的确会占用更多的存储空间 但是却需要更少的处理能力,对于移动设备来说,这是一个非常值得达成的折中点,因为这意味着我们的设备将能够在处理能力更低的设备上运行而不会遇到性能问题...dp和px之间的关系:1dp是屏幕密度为160dpi时的1px,也就是说在密度值为160dpi的情况下,1dp=1px。...里,1dp=3px,上述规范中,状态栏高度是24dp,所以在设计稿中状态栏的高度就是72px。

    65220

    Android图形图像处理:canvas的save()和restore()函数详解

    在Android图形图像处理中,canvas.save();和canvas.restore();是成对出现的,作用是用来保存画布的状态和取出保存前的状态。...比如当我们对画布进行平移旋转等操作时,有时我们只是想对特定的元素进行操作,比如图片,一个矩形,但是当你用canvas的方法来进行这些操作的时候,其实是对整个画布进行了操作,那么之后在画布上的元素都会受到影响...这段代码有save和restore,所以根据理论可以知道蓝色正方形没有旋转45度 ? 然后我们把save和restore注释掉,根据理论可以知道蓝色会和绿色一样在边上,只露出半个 ?...注意:rotate默认的旋转中心是(0,0)。把代码中的注释去掉再运行,从下图可以知道绿色正方形以(0,0)为旋转中心顺时针旋转45°后的样子。 ?...旋转以后相对于旋转后的canvas,它的左上角的坐标依然是(10,10),但是相对于原canvas则是(0, 10√2)

    2.3K40

    Canvas 动画: atan2 三角函数与鼠标跟随效果

    这个案例展示了如何使用HTML5的Canvas和JavaScript实现一个动态效果:在画布上绘制一个箭头,并让它实时跟随鼠标移动。这个小项目不仅有趣,还能帮助你理解编程和基本数学概念的实际应用。...项目需求 我们的目标是在一个画布上绘制一个箭头,并让这个箭头随着鼠标的移动自动旋转,始终指向鼠标的位置。...事件监听: 我们使用JavaScript的mousemove事件监听器,实时捕捉鼠标在画布上的位置。每次鼠标移动时,事件监听器都会记录鼠标的x和y坐标,这样我们就知道鼠标在哪里了。...图形旋转: 当我们知道鼠标的位置后,接下来要做的就是计算箭头应该朝向哪个方向。...监听mousemove事件:每次鼠标在画布上移动时,都会触发mousemove事件,这时我们计算鼠标相对于画布的x、y坐标,并存储在mouse对象中。

    10510
    领券