用法 在不同情况下有很多可绘制的类型,设置按钮的状态行为,创建可伸缩的按钮背景和创建复合可绘制图层。...这用于创建一个复杂的形状,然后可以作为布局或视图的背景附加在屏幕上。例如,可以使用可绘制的形状来更改按钮背景的形状,边框和渐变。 一个形状只是一个属性的集合,被合并来描述一个背景。...Drawable List 状态集合 StateListDrawable是一个在XML中定义的可绘制对象,根据对象的状态,使用多个不同的图像来表示相同的图形。...运行时Drawables 我们可以通过访问具有可绘制应用的视图的背景,在我们的Java代码的运行时访问drawable。...② TransitionDrawable - 可绘制的对象,可以在两个drawable资源之间交叉淡入淡出。用于两个drawable之间的动画。
布局定义了一些界面对象(UI)以及它们显示在屏幕上的位置。布局写在XML文件中。...activity子类的实例被创建后,onCreate(Bundle)方法被调用,并通过调用setContentView()方法获取管理属于自己的用户界面,根据传入的布局资源ID,生成指定布局视图并将其放置在屏幕上...布局是一种资源(包括像文件、音频文件以及XML文件等)放在目录app/res的子目录下。 R.java文件在Android项目编译过程中自动生成,不要随意修改。...apk文件要在模拟器上运行,还需以debug key签名(自动的,我们平常直接运行安装apk,实际上都有个默认签名的)。...编译过程 xml 布局文件转化成 view对象过程:aapt(Android Asset Packaging Tool)将布局文件资源编译压缩紧凑后,打包到.apk文件中。
下图展示了这个布局在一个更大的屏幕上显示的结果。 ? 可以注意到,即使屏幕的大小改变,视图之前的相对位置都没有改变。...现在有很多的应用程序为了支持大屏设备,都会实现“two pane”模式(程序会在左侧的面板上展示一个包含子项的List,在右侧面板上展示内容)。...例如,你想手机上显示single-pane界面,而在7寸平板和更大屏的设备上显示multi-pane界面,你需要提供以下文件: res/layout/main.xml: single-pane布局 res...然后通过SDK中带有的draw9patch工具打开这张图片(工具位置在SDK的tools目录下),你可以在图片的左边框和上边框绘制来标记哪些区域可以被拉伸。...你也可以在图片的右边框和下边框绘制来标记内容需要放置在哪个区域。结果如下图所示: ? 注意图片边框上的黑色像素,在上边框和左边框的部分表示当图片需要拉伸时就拉伸黑点标记的位置。
特别地,你能移除应用中不再使用的资源,你也能使用可缩放的Drawable对象代替图片文件。这节讨论一些通过减少资源从而减少APK大小的方法。...你也能通过代码绘制图像,从而减少APK大小。...代码方式绘制图像不需要任何空间因为你不再需要在APK中存储图像文件。 压缩PNG文件 AAPT工具能够在构建过程中通过无损压缩优化res/drawable/中的图片资源。...使用VectorDrawable对象,一个100B的文件能生成一个屏幕大小的清晰图片。 但是,系统需要很长时间渲染VectorDrawable对象,更大的图片需要更长的时间显示在屏幕上。...避免抽取Native库 在APK中存储未压缩的so文件,并且在Manifest文件的中设置android:extractNativeLibs为false,这会防止在安装时PackageManager
(保留一种图片,Apk大小确实减小了,相对应的兼容性却大大降低,这时候,就主要考虑兼容性的问题) 矢量图SVG 栅格图自身特点导致了高清资源同安装包体积之间的矛盾。...(矢量图SVG,在表达清晰图片的同时还不增加文件体积,并且兼容所有分辨率)我们认为SVG是比较合适的矢量化资源方案,因为它相比目前android上的一些矢量化方案更成熟、周边工具支持更好。...而且对于PNG来说的另一优势是在开启硬件加速的设备上,绘制Bitmap一个非常快速的过程。可以想象,让SVG不比PNG慢将是一件很有挑战的事情。...因此必须要考虑如何即可以用SVG但又不增加开发负担 让我们一起来见证下,经过微信团队的优化后,真实有效的数据吧! 清晰度 ? 两张xxhdpi资源在OPPO R7Plus上的显示结果。...使用方式如上述一致,首先我们看一下生成的xml文件内容: apk/res/android"
把apk文件上传到模拟上,模拟器安装apk文件,开启应用软件。...assets资源目录 Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径...project.properties 项目环境信息,一般是不需要修改此文件 12.Android的打包过程 是把Android的应用程序打包成一个.apk文件,.apk文件可以安装在手机或者模拟器上。...devices 列出所有的设备 $ adb shell 挂载到linux的空间 可以执行liux指令 $ adb install xxx.apk 如果有多个设备,我们可以指定设备 $ adb install...+ F11 横竖屏的切换 14.电话拨号器(重点) 开发项目的步骤: 1、理解需求,弄明白需求后在写代码; 2、在Android工程中设计UI界面; 3、代码实现业务逻辑; 电话拨号器的代码: //
下图展示了这个布局在一个更大的屏幕上显示的结果。 可以注意到,即使屏幕的大小改变,视图之前的相对位置都没有改变。...现在有很多的应用程序为了支持大屏设备,都会实现“two pane”模式(程序会在左侧的面板上展示一个包含子项的List,在右侧面板上展示内容)。...例如,你想手机上显示single-pane界面,而在7寸平板和更大屏的设备上显示multi-pane界面,你需要提供以下文件: res/layout/main.xml: single-pane布局 res...为了将图片转换成nine-patch图片,你可以从一张普通的图片开始: 然后通过SDK中带有的draw9patch工具打开这张图片(工具位置在SDK的tools目录下),你可以在图片的左边框和上边框绘制来标记哪些区域可以被拉伸...你也可以在图片的右边框和下边框绘制来标记内容需要放置在哪个区域。结果如下图所示: 注意图片边框上的黑色像素,在上边框和左边框的部分表示当图片需要拉伸时就拉伸黑点标记的位置。
http://idunnolol.com/android/drawables.html ---- ColorDrawable ColorDrawable 实际上是代表了单色可绘制区域,它包装了一种固定的颜色...,当ColorDrawable被绘制到画布的时候会使用颜色填充Paint,在画布上绘制一块单色的区域。...* 但是在代码中必须要明确指出透明度(Alpha)代表的数据, * 如果省略了就表示完全透明的颜色,也就是说当绘制到画布上时,看不出有任何效果。...---- LayerDrawable LayerDrawable 管理一组drawable,每个drawable都处于不同的层,当它们被绘制的时候,按照顺序全部都绘制到画布上。...按照顺序比较状态,当遇到匹配的状态后,就返回对应的drawable,因此需要把最精确的匹配放置在最前面,按照从精确到粗略的顺序排列。
android:scaleX:指定分组对象在横轴上的缩放比例。取值0.5表示缩小一半,取值2.0表示放大一倍。 android:scaleY:指定分组对象在纵轴上的缩放比例。...android:translateX:指定分组对象在横轴上的平移距离。 android:translateY:指定分组对象在纵轴上的平移距离。...下面是人脸的矢量图形定义文件vector_face_eye.xml: apk/res/android...下面是圆圈的矢量图形定义文件vector_pay_circle.xml: apk/res/android...(含圆圈图形)定义文件vector_pay_success.xml: apk/res/android
前言 一些定制、第三方 ROM 在安装了 Google 框架后,仍然无法使用其网络定位功能。我在网上搜索了许多资料,整理如下。 本文假设你的设备已经 Root,并已经安装了 Google 框架。...二、提取需要的资源 取出 ROM 中的 framework-res.apk,并反编译得到需要修改的文件: adb pull /system/framework/framework-res.apk apktool...if framework-res.apk apktool d framework-res.apk 三、修改文件 修改位置提供商相关设置,使用 Google 提供网络定位。...1、修改 framework-res/res/values/arrays.xml,找到 config_locationProviderPackageNames 的位置,确保 Google 在列表中。...-d ./ 2、将提取出的文件替换到原来的 framework-res.apk 中: cp framework-res.apk framework-res-modified.apk zip -0 framework-res-modified.apk
2、本单元学习要求 (1) 掌握各种资源的基本访问用法; (2) 掌握定制控件样式、界面主题、可绘制资源程序的编写方法; (3) 掌握原生资源打包方法。...难点 (1) 可绘制资源 Drawable代表了一大类资源。比如:图形、位图图像就是可绘制的资源。...定制控件样式和界面主题的方法。 可绘制资源的使用。 使用assets打包资源的方式。 2、本单元课后习题 1、如何打开res/raw目录中的数据库文件?...答案:第一种是res下可编译的资源文件,这种资源文件系统会在R.java里面自动生成该资源文件的ID,(除了raw外,其他资源目录中的资源文件都会被编译),这也是为什么将APK文件解压后无法直接查看XML...assets与res/raw目录中的资源文件不会做任何处理,所以将APK解压后,这两个目录中的资源文件都会保持原样。
项目中遇到一个问题,Android 8.0 系统上 APP 的 icon 显示的是默认的机器人的 icon,这是什么回事?...原来 Android 8.0(API 级别 26)引入了自适应启动器图标,可以在不同设备模型中显示各种形状。下面看下官方酷炫动态图: ? ? 图1. 自适应图标支持各种设备之间不同的掩码。...比以往多一个 res/mipmap-anydpi-v26 文件,打开,有背景和前景。 ic_launcher_background.xml apk/res/android"> 可绘制资源。
确保系统已经安装了Java,并且JAVA_HOME环境变量已经设置。 反编译和再编译的APK需要签名才能在设备上安装。可以使用jarsigner工具对APK进行签名,后面会讲。...它将名为my_app.apks的文件重命名为my_app.zip。这通常是因为.apks文件实际上是一个特殊格式的.zip文件,重命名后可以使用标准的解压工具来打开。...framework-res.apk提取替换 某些APK在反编译时需要特定的框架资源文件。...判断是否安装有 framework-res.apk apktool if framework-res.apk 1、把设备中的framework-res.apk提取出来 连接对应的Android设备...,这里我使用的是Android14设备,拉取设备上的框架资源文件到PC端。
对于上面四个方面,大致可以从以下两个方面来进行优化: 界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。...在 Android5.0 以前,在应用中测试电量消耗比较麻烦,也不准确,5.0 之后专门引入了一个获取设备上电量消耗信息的 API,即Battery Historian。...APK瘦身 应用安装包大小对应用使用没有影响,但应用的安装包越大,用户下载的门槛越高,特别是在移动网络情况下,用户在下载应用时,对安装包大小的要求更高,因此,减小安装包大小可以让更多用户愿意下载和体验产品...Android的apk主要有以下信息构成: assets文件夹。存放一些配置文件、资源文件,assets不会自动生成对应的 ID,而是通过 AssetManager 类的接口获取。 res。...res 是 resource 的缩写,这个目录存放资源文件,会自动生成对应的 ID 并映射到 .R 文件中,访问直接使用资源ID。 META-INF。
drawable:这类资源以XML或者Bitmap文件保存在res/drawable目录下,用来描述可绘制对象。...raw:这类资源以任意格式的文件保存在res/raw目录下,它们和assets类资源一样,都是原装不动地打包在apk文件中的,不过它们会被赋予资源ID,这样我们就可以在程序中通过ID来访问它们。...jarsigner:对APK进行签名 一旦apk文件生成,它必须被签名才能被安装在设备上。在开发过程中,主要用到的就是两种签名的keystore。...Zipalign是一个android平台上整理APK文件的工具,它对apk中未压缩的数据进行4字节对齐,对齐的主要过程是将APK包中所有的资源文件距离文件起始偏移为4字节整数倍,对齐后就可以使用mmap...减小图片文件大小可以加快构建速度(无需在构建时进行压缩),尤其是当应用使用大量图片资源时。不过,在解压缩 WebP 图片时,能会注意到设备的 CPU 使用率有小幅上升。
ColorDrawable colorDrawable是最简单的Drawable,它实际上是代表了单色可绘制区域,它包装了一种固定的颜色,当ColorDrawable被绘制到画布的时候会使用颜色填充Paint...,在画布上绘制一块单色的区域。...,管理一组drawable,每个drawable都处于不同的层,当它们被绘制的时候,按照顺序全部都绘制到画布上。...drawable都对应一个level范围,当它们被绘制的时候,根据level属性值选取对应的一个drawable绘制到画布上。...java中的switch-case组合,按照顺序比较状态,当遇到匹配的状态后,就返回对应的drawable,因此需要把最精确的匹配放置在最前面,按照从精确到粗略的顺序排列。
以下的系统,这样就没有效果,按钮会变成默认的灰色状态,点击按钮也不会有颜色的状态区别 为了兼容5.0以下的设备,我们可以利用seletor(勘误:button用theme在5.0以下也是有按压变色的...和drawable-v21下新建同一份文件selector_green_button.xml apk/res/android"> android:id=”@android:id/mask”会让系统并不会真的绘制,并告知波纹的绘制边界 如果写成下面,波纹的绘制范围会超出控件的边界 //这里是扩散水波纹的色值 如上,这样设置后5.0以下的设备具有按钮按下变色的效果,5.0以上就具有水波纹效果.其他控件同理 后续: Material Design Button
第一个是Name,代表应用程序的名称,如zwz 第二个是包名,建议使用 学校.姓名,如ypc.zwz,或者公司的域名 第三个是保存位置,即项目本地文件存放的物理位置 第四个是编程语言,我们选择Java...---- 四 、下载安装模拟器 Android模拟器是谷歌提供的一款运行Android程序的虚拟机,可以模拟手机、平板电脑等等设备。...而自动自带的模拟器性能较差,推荐使用第三方的模拟器,如夜神模拟器、雷电模拟器等等。 我这里以雷电模拟器为例,百度搜索雷电模拟器,打开官网,下载正式版,后在电脑上安装雷电模拟器。...res节点用来显示保存在res目录下的资源文件,当res目录中的文件发生变化时,R文件会自动修改。在res目录中还包括一些子包。...接着Android Studio会自动编译该项目,后在模拟器上运行。
减少 布局层级 配合标签使用,可优化 加载布局文件时的资源消耗 具体使用 // 使用说明: // 1....当其他布局通过标签引用布局A时,布局A中的标签内容(根节点)会被去掉,在里存放的是布局A中的标签内容(根节点)的子标签(即子节点),以此减少布局文件的层次...只有当ViewStub被设置为可见 / 调用了ViewStub.inflate()时,ViewStub所指向的布局文件才会被inflate 、实例化,最终 显示指向的布局 具体使用:在布局A中引入布局...(View.Gone)的区别:View 的可见性设置为 gone 后,在inflate 时,该View 及其子View依然会被解析;而使用ViewStub就能避免解析其中指定的布局文件,从而节省布局文件的解析时间...如WindowManagerService 等 Framework 部分关键模块)、服务、View系统 功能包括:跟踪系统的I/O 操作、内核工作队列、CPU 负载等,在 UI 显示性能分析上提供很好的数据
领取专属 10元无门槛券
手把手带您无忧上云