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

Android中的各种Drawable类详解

视图View的背景就是一个Drawable对象,在视图需要进行绘制而调用draw函数时,内部的一部分实现会将调用委托给背景属性mBackground这个Drawable对象的draw函数来完成背景的绘制...上面的几个属性的设置都会激发onXXXX系列方法来让派生类在属性值发生变化时进行更新处理,而有时候我们希望一些更新逻辑不是在派生类中处理,而是在持有Drawable对象的对象上或者委托给外部进行处理,因此可以调用如下方法...Drawable中的内容和特定的颜色进行特殊的结合渲染处理。...比如显示在左上角,比如拉伸显示在整个画布中等等 public void setGravity(int gravity) 图片的默认显示是一张图片进行拉伸,你可以设置平铺的方式。...当为某个视图设置了一个StateListDrawable类型的背景时,那么当视图处理某个state时,背景就会根据特定的state不同而显示不同的背景。

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

    端开发技术——解密Flutter响应式布局

    它允许您根据与布局中其他视图的空间关系来指定每个视图的位置和大小。 但这并不能解决大型设备的问题,在大型设备中,拉伸或只是调整UI组件的大小并不是利用屏幕面积的最优雅的方式。...1.4 Vector graphics Vector graphics使用XML创建图像来定义路径和颜色,而不是使用像素位图。它可以缩放到任何大小。...在Android中,要在单个屏幕上显示多个UI视图,请使用Fragments,它们类似于可在应用程序的Activity中运行的可重用组件。...您可以看到,在Flutter中创建分屏视图是非常容易的,您只需使用一行将它们并排放置,然后为了填满整个空间,只需使用Expanded widget包装两个视图。...但是,如果您现在移动到一个特定的屏幕,然后在视图之间切换,那么您将丢失页面的上下文,也就是说您将始终返回到第一个页面,即“聊天”。为了解决这个问题,我使用了多个回调函数来返回所选页面到主页。

    2.3K00

    创建支持多种屏幕尺寸的Android应用

    Android系统通过以下两种方式帮助应用程序实现密度无关性: * 系统为当前屏幕密度调整dp单位到适当的值 * 如有必要,系统会根据当前屏幕密度调整绘图资源到适当的尺寸 在图2中,文本视图和位图绘图有规定的尺寸的像素...或者更高版本上开发应用程序,请参阅Declaring Tablet Layouts for Android 3.2章节获取关于新的配置限定符的信息,当申明了指定屏幕尺寸(而不是使用表1中的尺寸限定符的布局资源时...我们建议避免使用这个属性,而不是按照本文档中的建议确保布局适合更大屏幕。...我们建议避免使用这个属性,而不是按照本文档中的建议确保你的布局适合更大屏幕。 注意:当在Android3.2或者更高版本上开发时,不应该使用较旧的屏幕尺寸属性并结合上面列出的属性。...例如,如果myView.getWidth()函数的返回值是10,在当前屏幕上视图有10个像素宽度,但是在更高密度屏幕的设备上,返回值可能是15.如果在你的应用程序代码中,使用像素值为位图的单位,且该位图不是为当前屏幕密度预先调整的

    2.7K60

    如何在flutter中构建响应式布局(第五节)

    4.矢量图形 与使用像素位图创建相反,矢量图形是在 XML 文件中定义为路径和颜色的图像。它们可以缩放到任何大小而不会缩放工件。在 Android 中,您可以将?...在 Android 中,要在单个屏幕上显示多个 UI 视图,您可以使用 Fragments,它们就像可以在应用程序的 Activity 内运行的可重用组件。...记住:之间的主要区别MediaQuery和LayoutBuilder是MediaQuery使用屏幕的完整范围内,而不是你的特定图标的只是大小,而LayoutBuilder能够确定特定部件的最大宽度和高度...可以看到,在 Flutter 中创建拆分视图真的很容易。您只需使用 a 将它们并排放置Row,然后,为了填满整个空间,只需使用Expanded小部件包装两个视图。...但是现在,如果您移动到特定屏幕然后在视图之间切换,您将丢失页面的上下文;也就是说,您将始终返回第一页,即 Chats。为了解决这个问题,我使用了多个回调函数将所选页面返回到HomePage.

    2.9K10

    Android必须要掌握的东西

    trace options head Android中执行网络请求 全面支持HTTP协议的HttpClient(在android2.3以前), 在android6.0中该库已被移除 最佳选择HttpURLConnection...Android中的布局优化, 内存优化; 布局优化 减少视图层级 通过工具分析视图层级, 优先相对布局, 约束布局 merge标签, 去处理子布局的根视图和父布局是同一类型的情况 延迟加载的ViewStub...在使用HashMap时,即使你只设置了一个基本数据类型的键,比如说int,但是也会按照对象的大小来分配内存,大概是32字节,而不是4字节。因此最好的办法就是像上面所说的一样,使用优化过的数据集合。...如果整个app运行在一个进程中,当后台播放的时候,前台的那些UI资源也没有办法得到释放。类似这样的app可以切分成2个进程:一个用来操作UI,另外一个用来后台的Service....Response及其投递类, 使用ResponseDelivery来封装Response的投递, 保证Response在UI线程中执行, Response会根据用户的不同需求返回特定的类型.

    50310

    用 TensorFlow Lite 在安卓系统上实现即时人体姿态跟踪

    我们很高兴发布一个TensorFlowLite样本应用程序,用于在Android上使用PoseNet模型进行人体姿态估计。...PoseNet是一种视觉模型,通过检测关键身体部位的位置来估计人在图像或视频中的姿势。例如,模型可以估计一个人的肘部和/或膝盖在图像中的位置。...此功能由estimateSinglePose()提供,该方法在已处理的RGB位图上运行TensorFlow Lite解释器并返回Person对象。本页面解释如何解释PoseNet的输入和输出。...为了使姿态渲染与摄像机帧同步,输出显示使用了单个SurfaceView,而不是单独的姿态和摄像机视图实例。...SurfaceView通过在视图画布上获取、锁定和绘制来确保将surface毫不延迟地放到屏幕上。

    3.8K30

    Android训练课程(Android Training) - 高效的显示图片

    为了有效的利用内存,这些组件在滚动时会回收重用它们的子视图控件。如果每个子控件都在AsyncTask中引发,那么当任务完成时就无法得到保证,导致被关联到的视图还没有被回收,就使用在其他子视图中了。...另外 在 Android 3.0 (API 级别 11)之前,一个位图的后台数据被存放在原始内存中,它不能以可预见的方式被释放,它潜在性的导致一个应用临时的超出它的内存限制而崩溃。...Android 2.3添加了并发的垃圾回收,这意味着,失去引用的图像的内存很快被回收。 在 Android 2.3.3 (API 级别 10) 及以下,位图的后备的像素数据被存储在原生内存中。...它被和位图本身分开,它被存储在Dalvik 的堆中。 在原生内存中的像素数据部能以可预知的方式被释放,可能导致一个应用临时的越过内存限制而崩溃。...Android 3.0 (API 级别 11)中,像素数据也被存储在Dalvik 的堆中,和它关联到的位图一起了。 下面的章节描述了 在不同的Android版本中如何优化内存的管理。

    2.9K00

    React Native组件(二)View组件解析

    View组件用transform属性的效果不是很明显,绝大部分组件都继承了View组件的transform属性,比如Text。我们改写2.4小节中的例子,将textStyle改为如下代码: ?...它用来控制当前视图是否可以作为触控事件的目标。 在开发中,很多组件是被布局到手机界面上的,其中一些组件会遮盖住它的位置下方的组件,有一些场景需要被遮盖住的组件来处理事件。...它用来决定视图是否要把它本身(以及所有的子视图)渲染到一个GPU上的硬件纹理中。...在Android平台上,这对于只修改透明度、旋转、位移和缩放的动画和交互是很有用的:视图不必每次都重新绘制,显示列表也不需要重新执行,纹理可以被重用于不同的参数。...举例来说,当我们移动一个静态视图的位置的时候,栅格化允许渲染器重用静态视图的缓存位图,并快速合成。 栅格化会导致离屏的绘图传递,位图会消耗内存。所以使用此属性需要进行充分的测试和评估。

    2.5K60

    Java内存泄漏检测库LeakCanary介绍,了解?

    (SignView.java:121) 没有人喜欢 **OutOfMemoryError **崩溃 在正方形寄存器中,我们在位图缓存上绘制客户的签名。...我们没有想过从Java堆中分配位图。我们还不幸运。 我们看错了 位图大小不是问题。当内存几乎满的时候,OOM可以发生在任何地方。在创建大对象(如位图)的地方,这种情况更容易发生。...如果一个引用链在一个对象的预期生存期结束后将其保存在内存中,这将导致内存泄漏。当这些漏洞累积起来时,应用程序的内存就会耗尽。...例如,在调用 Activity.onDestroy() 时,其视图层次结构及其关联的位图都应该是可垃圾回收的。如果在后台运行的线程持有对活动的引用,则无法回收相应的内存。...结论 启用LeakCanary后,我们发现并修复了应用程序中的许多内存泄漏。我们甚至在Android SDK中发现了一些漏洞。 结果是惊人的。现在,OOM错误导致的崩溃减少了94%。 ?

    99320

    关于直播系统和短视频系统安卓手机屏幕适配的方向思路

    直播与短视频的接踵而至,将互联网推向了网红经济时代,而智能手机的更新迭代为二者的发展提供了“温床”。...但随着Android机型的增多,设备碎片化的程度也在不断加深,因此为了保证用户在不同Android机型下的体验效果一致,我们需要对各种手机屏幕进行适配。...则可以准确控制视图之间的位置关系一一排列; 三是布局中的组件大小不要固定尺寸,据情况而定使用warp_content或match_parent以及权重,同时配合minWidth,minHeight等属性...一是在一些特定场景下使用,假设图片名称为9.png的自动拉伸位图,在直播系统中的私信聊天框,9.png的位图可以根据内容自动适应且无变形; 二是自定义view和使用drawable画图; 三是Imagview...对屏幕的宽高进行测量,一些特定情况下,按比例取值,则无需考虑屏幕尺寸不统一带来的麻烦。

    1.5K00

    重走Android路 之 Android系统架构图以及开发工具了解

    Java API框架 ---- Android OS的整个功能集可以通过用Java语言编写的API来获得。...当然,作为一个合格的Android开发者,我们不能单纯的停留在Api过程中,我们也应当为我们的Android贡献出自己的一份力量,例如LZ这简单Low的博文,至少证明在我们的青春岁月中,我们曾为了一份执着而不懈努力着...当然还有很多,这就需要各位亲自行发掘了哦~ 下面来看一下在Android Studio中工程结构以及其所代表的含义: Android视图 ---- 默认情况下,Android Studio会在Android...); 在一个组中显示所有备用资源文件,而不是在每个资源限定符的单独文件夹中。...在每个Android应用程序模块中,文件显示在以下组中: manifests 包含AndroidManifest.xml文件。

    1.5K20

    简单谈谈OLTP,OLAP和列存储的概念

    online analytic processing) 数据库同样也开始越来越多的用于数据分析,数据分析需要扫描大量的记录,同时每个记录通常只会读取少数的几列,并计算汇总统计信息(如计数,求和或平均值),而不是返回原始数据给用户...例如: 品牌和产品类别可能有单独的表格,dim_product表中的每一行可以再次引用品牌和类别作为外键,而不是将其作为字符串直接存储在dim_product表中。...在大多数 OLTP 数据库中,存储都是以面向行的方式进行布局的:表格的一行中的所有值都相邻存储。 文档数据库也是相似的:整个文档通常存储为一个连续的字节序列。...在传统的指令中,需要使用循环来依次处理每个元素,而在SIMD指令中,可以一次性处理整个向量,从而大大加快了计算速度。...虚拟视图和物化视图是数据库中视图的两种类型。视图是从一个或多个表中派生出来的虚拟表,它只包含从这些表中选取的数据的逻辑表示,而不是实际的数据。

    3.9K31

    高效Android开发者必须知道的4个工具

    这同样适用于通常不被公布的附加功能,尽管它们在常规作业中真的非常有用。 ? 特别是,在创建移动app的时候,每个Android开发者必须解决一系列的问题。...例如: 在布局运行到设备之前先检查它看上去如何 运行代码检查工具,如Lint:在编译之前很难发现代码中的错误 为位图图形的所有显示分辨率和状态(启用,禁用,按压等)提供选择选项,并将它们导出到不同的数字设备...然而,快速而高效解决紧迫问题的方法并不是每个人都知道的。下面让我们为大家详细介绍一些高效Android开发中必知的好工具。...tools:listitem, listheader, listfooter 你可以轻松地用特定布局调整组件视图,以便于分开list、header和footer的元素。...例如,通过添加resource annotation @ColorRes,当你试图输入颜色代码,而不是引用resource ID的时候,就会得到框架警告。

    70930

    高效Android开发者必须知道的4个工具

    这同样适用于通常不被公布的附加功能,尽管它们在常规作业中真的非常有用。 ? 特别是,在创建移动app的时候,每个Android开发者必须解决一系列的问题。...例如: 在布局运行到设备之前先检查它看上去如何 运行代码检查工具,如Lint:在编译之前很难发现代码中的错误 为位图图形的所有显示分辨率和状态(启用,禁用,按压等)提供选择选项,并将它们导出到不同的数字设备...然而,快速而高效解决紧迫问题的方法并不是每个人都知道的。下面让我们为大家详细介绍一些高效Android开发中必知的好工具。...tools:listitem, listheader, listfooter 你可以轻松地用特定布局调整组件视图,以便于分开list、header和footer的元素。...例如,通过添加resource annotation @ColorRes,当你试图输入颜色代码,而不是引用resource ID的时候,就会得到框架警告。

    1.3K10

    Flutter的文本、图片和按钮使用

    而文本、图片和按钮则是这些不同UI框架中构建视图都要用到的最基本控件。...1 文本控件 文本是视图系统中的常见控件,用来显示一段特定样式的字符串,就比如Android里的TextView、iOS中的UILabel。而在Flutter中,文本展示是通过Text控件实现的。...: Text( '文本是视图系统中的常见控件,用来显示一段特定样式的字符串,就比如Android里的TextView,或是iOS中的UILabel。'...FadeInImage控件提供图片占位功能,并支持在图片加载完成时淡入淡出视觉效果。由于Image支持gif格式,还可将一些炫酷加载动画作占位图。...展示效果: 4 总结 UI控件是构建一个视图的基本元素,而文本、图片和按钮则是其中最经典的控件。

    59220

    2021年Android面试题及答案收集(不断更新中)

    47.并发和并行的区别及理解 在单核的机器上,“多进程”并不是真正多个进程同时执行,而是通过CPU时间分片,操作系统快速在进程间切换而模拟出来的多进程,我们通常将这种情况称为并发,也就是多个进程的运行行为是...Bitmap的使用及内存优化 位图是相对于矢量图而言的,也称为点阵图,位图由像素组成,图像的清晰度由单位长度内的像素的多少来决定的,在Android系统中,位图使用Bitmap类来表示,该类位于android.graphics...用户与视图交互,视图接收并反馈用户的动作,视图把用户的请求传给相应的控制器,由控制器决定调用哪个模型,然后由模型调用相应的业务逻辑对用户请求进行加工处理,如果需要返回数据,模型会把相应的数据返回给控制器...,由控制器调用相应的视图,最终由视图格式化和渲染返回的数据,一个模型可以有多个视图,一个视图可以有多个控制器,一个控制器可以有多个模型。...在程序执行的时候,常量池会储存在Method Area,而不是堆中。 堆与栈:Java的堆是一个运行时数据区,类的(对象从中分配空间。

    90620

    Android开发笔记(一百七十一)使用Glide加载网络图片

    虽然Glide支持上述四种显示类型,但它无法设定FIT_XY对应的平铺方式,若想让图片平铺至充满整个图像视图,还得调用图像视图的setScaleType方法,将拉伸类型设置为ImageView.ScaleType.FIT_XY...具体说来,是先到内存中查找图片,有找到就直接显示内存图片,没找到的话再去磁盘查找图片;在磁盘能找到就直接显示磁盘图片,没找到的话再去请求网络;如此便形成“内存→磁盘→网络”的三级缓存。...原来load方法返回的是请求建造器,调用建造器对象的into方法,方能在图像视图上展示网络图片。...在得到网络图片之前,会先在图像视图展现占位图。 error:设置发生错误的提示图。网络图片获取失败之时,会在图像视图展现提示图。 override:设置图片的尺寸。...centerCrop:保持图片的宽高比例,充满整个图像视图,剪裁之后居中显示,对应拉伸类型CENTER_CROP。

    4K20

    Flutter技术与实战(2)

    Flutter 通过控件树中的每个控件创建不同类型的渲染对象,组成渲染对象树。而渲染对象树在 Flutter 的展示过程分为四个阶段:布局、绘制、合成和渲染。...在 Flutter 中,Widget 是整个视图描述的基础,在 Flutter 的世界里,包括应用、视图、视图控制器、布局等在内的概念,都建立在 Widget 之上,Flutter 的核心设计思想便是一切皆...由 State 创建 Widget,以数据驱动视图更新,而不是直接操作 UI 更新视觉属性,代码表达可以更精炼,逻辑也可以更清晰。...为此,Flutter 对这个机制做了优化,其框架内部会通过一个中间层去收敛上层 UI 配置对底层真实渲染的改动,从而最大程度降低对真实渲染视图的修改,提高渲染效率,而不是上层 UI 配置变了就需要销毁整个渲染视图树重建...虽然命令式的 UI 编程风格(原生 Android 和 iOS 框架开发)更直观,但声明式 UI 编程方式的好处是,可以让我们把复杂的视图操作细节交给框架去完成,这样一来不仅可以提高我们的效率,也可以让我们专注于整个应用和页面的结构和功能

    1.5K10
    领券