当前位置: 首页 > news >正文

Android Drawable,ColorMatrix

Drawable的子类有StateListDrawable,NinePatchDrawable等。

StateListDrawable

StateListDrawable中包含一组状态Drawable对象,对应的<selector/>标签中的item标签属性中组合了state和drawable或color:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/icon2" />
</selector>

StateListDrawable也可以设置给textColor。

LayerDrawable

LayerDrawable中包含一组分层Drawable对象,对应使用<layer-list/>标签描述。其item标签中的android:bottom|top|left|right等属性用于指定一个长度值,用于指定将该Drawable对象绘制到目标组件的指定位置。

ShapeDrawable

ShapeDrawable定义基本几何图形,然后给图形定义一些外观效果。对应使用<shape/>标签,android:shape="rectangle|voal|line|ring"属性指定几何类型:矩形、椭圆、线、圆。标签内部用成员<corners/>定义角弧度,<padding/>定义内边距,<size/>定义尺寸和边颜色,<solid/>定义单色填充,<gradient/>定义填充渐变类型和颜色,<stroke/>定义边框宽度和颜色。

示例:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置背景色为透明色-->
<solid android:color="#0000"/>
<!--设置红色边框-->
<stroke android:width="2dp" android:color="#f00" />
</shape>

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<!--指定圆角矩形的4个圆角的半径-->
<corners android:topLeftRadius="20dp"
android:topRightRadius="10dp"
android:bottomRightRadius="20dp"
android:bottomLeftRadius="10dp"/>
<!--指定边框线条的宽度和颜色-->
<stroke android:width="4px" android:color="#f0f" \'
<!--指定使用渐变背景色,使用sweep类型的渐变颜色从红色→绿色→蓝色-->
<gradient

android:startColor="#f00"
android:centerColor="#0f0"
android:endColor="#00f"
android:type="sweep"/>
</shape>

ClipDrawable

ClipDrawable表示从位图上截取的图片片段,对应标签<clip/>,标签属性中android:drawable指定要截取的源drawable,android:clipOrientation指定截取方向水平或垂直,android:gravity指定截取对齐方式。ClipDrawable调用setLevel设置截取尺寸大小,值从0到整张10000。

使用ClipDrawable加定时器可实现图片徐徐展开效果,进而可以应用到进度条。

AnimationDrawable资源

多张图片逐个播放称为帧动画,一张图片平移变换等称为补间(Tween)动画。

定义补间动画资源用<set/>标签,属性android:duration设置持续时间,属性android:interpolater设置动画变化速度:匀速、加速、减速、变速等,属性android:shareInterpolater设置是否统一速度,属性android:filllAfter设置是否保留变换结果。

内部用<alpha/>设置透明度变化,<scale/>设置缩放变化,<translate/>设置位移变化,<rotate/>设置旋转变化。

定义补间动画的思路很简单:设置一张图片的开始状态(包括透明度、位置、缩放比、旋转度),
并设置该图片的结束状态(包括透明度、位置、缩放比、旋转度),再设置动画的持续时间,Android
系统会使用动画效果把这张图片从开始状态变换到结束状态。

当进行缩放变换(scale)、旋转(rotate)变变换时,还需要指定pivotX、pivotY两个属性,这两个属性用于指定变换的"中心点"--比如进行旋转变换时,需要指定"旋轴点";进行缩放变换时,需要指定"中心点"。

先用AnimationUtils.loadAnimation()得到Animation对象,再把它设置为imageView的startAnimation方法的参数,由视图来启动动画。

PropertyAnimation属性动画资源

Animator是一个抽象类代表一个属性动画,通常会使用它的子类:AnimatorSet、ValueAnimator、ObjectAnimator、TimeAnimator。

定义属性动画的XML资源文件能以如下三个元素中的任意一个作为根元素。
<set.../>:用于包含<objectAnimator.../>、<animator.../>或<set.../>子元素,该元素定义的资源代表AnimatorSet对象。
<objectAnimator.../>:用于定义ObjectAnimator动画。
<animator.../>:用于定义ValueAnimator动画。

把应用此动画的视图设置为此属性动画的target参数,由动画对象自己启动动画。

1. 9.png格式的图片是安卓平台在png图片的基础上新创的格式。
它是由9个补丁(patch)组成的png,命名为 .9.png
与传统的png格式图片相比, 9.png 格式图片在图片四周有一圈一个像素点组成的边沿,该边沿用于对图片的可扩展区和内容显示区进行定义。
android会自动将.9.png的文件当做 9 patch文件来处理,9.png的文件就是一个png文件,其特殊之处在于周围一圈的框框由 0x00000000或者 0xffffffff 组成,
即有一圈黑白框,黑框所框住的地方是会被resize的,另外的4个角不会被resize, 而上下左右的四块,会被单向resize。
这对于一些按钮的png十分有好处,可以保持四周的圆角尺寸不变,而中心放大。
9.png图片的四周与普通的png图片相比多了一个像素位的白色区域,该区域只有在图片被还原和制造的时候才能看到,当打包后无法看见,并且图片的总像素会缩小2个像素,
比如23x23像素的9.png图片被打包后会变成21x21像素。
典型的例子是四个角是弧形的按钮图片,被拉伸时要保持弧形角不被拉伸,可设置四个圆角内侧的4条线拉伸,这样会保持中间内部的图像形状不变化,相对位置也不偏移。
这样图片被分成了9个部分,所以叫nine patch。

指定颜色值变化范围比较小的区域为伸缩区域来防止图片伸缩变形。内容区域一般设置为小于等于伸缩区域。

如果res/drawable目录中的9.png中没有黑线,eclipse会报错。


2.android\tools目录中有一个draw9patch.bat,即画黑边工具,draw9patch.bat的使用方法是,打开一个普通的png图,然后将四周的中心用鼠标点上。再保存。
在右边可以看到缩放后的效果。
{注意,对于从别人apk中破解9.png的时候,android编译器已经将9.png的边框去掉了,所以还要再使用draw9patch.bat自己整一下。}
选中show patches,左侧黑色边线对应的绿色区域是上下拉伸的区域,上侧黑色边线对应的绿色区域是左右拉伸的区域。
被拉伸的区域贯穿上下或左右,不能实现只拉伸内部一块区域。
右键,或shift+左键清除黑线。
从apk文件中解压得到的.9.png,是已经去掉了黑边了的。在打包成apk时,.9.png中的空白像素被去掉了。可能这些信息被记录到了包的另外的地方。
draw9patch右侧的显示表示上下拉伸,左右拉伸,上下左右同时拉伸时的效果,同时还可以看到内容区域默认是整个图片。但是实际情况可能是当不设置内容区域时,

NinePatch图片使用的就是拉伸区域作为内容区域,而不是NinePatch编辑器中指示的图片全部区域。

3.GradientDrawable 梯度绘图,渐变绘图

可以把它设置给窗口等对象的背景,实现渐变效果。


4.A NinePatchDrawable graphic is a stretchable bitmap image, which Android will automatically resize to accommodate the contents of the View
in which you have placed it as the background.
NinePatchDrawable 的特性是在它作为background时展现的。
If a View object sets the NinePatch as its background and then specifies the View's text, it will stretch itself so that all the text fits inside only
the area designated by the right and bottom lines (if included).
同时,它的内容区域是为视图的文本内容准备的。
Tools > Draw 9-patch中查找更多介绍。
http://developer.android.com/guide/developing/tools/draw9patch.html


1.使用InputStream inputStream = context.getResources().openRawResource(resId);读取在res\raw中的a.html时,报
WARN/ResourceType(406): getEntry failing because entryIndex 2 is beyond type entryCount 2,
修改为a.data后读取成功。
2.



3.android不建议使用内部的图片资源,想使用最好拷贝一份使用。
Warning: Because these resources can change between platform versions, you should not reference these icons using the Android platform resource IDs
(i.e. menu icons underandroid.R.drawable).
If you want to use any icons or other internal drawable resources, you should store a local copy of those icons or drawables in your application resources,
then reference the local copy from your application code. In that way, you can maintain control over the appearance of your icons,
even if the system's copy changes. Note that the grid below is not intended to be complete.
在D:\android-sdk_r10-windows\platforms\android-8\data\res中可以找到。


http://www.rexsee.com
http://www.itbinary.com/art/14/167.html
http://www.apkbus.com/forum.php?mod=viewthread&tid=2276&extra=page%3D1


4.Android图片处理(Matrix,ColorMatrix)
http://www.cnblogs.com/leon19870907/articles/1978065.html

http://www.jsqmd.com/news/491468/

相关文章:

  • 手把手教你用coze搭建AI Agent(智能体)
  • Hi3519芯片开发过程笔记:四、Uboot环境变量nand_env.bin镜像生成方法(默认环境变量设置方法)
  • C语言链表练习
  • Innode引擎监控的开启的方法
  • C盘清理指南(三)——文件目录更改
  • 闲置大润发购物卡别浪费!超全回收实操指南,新手也能零踩坑 - 京回收小程序
  • mysql版本详解
  • P1248 加工生产调度 - Johnson 法则如何使用 - java版
  • 10分钟上手SIMP:从安装到基础配置的快速入门指南
  • 国产先进封装设计软件选型指南:2026对标Cadence SIP的国产工具推荐 - 品牌2026
  • 如何学习硬件设计——理论篇
  • 百联卡回收最新攻略:方法和流程详解 - 猎卡回收公众号
  • AF350标记α-银环蛇d素,AF350-a-Bungarotoxin核心功能与应用场景
  • 甩掉API硬编码包袱:2026桌面级办公智能体选型指南及实在Agent等主流工具横评
  • 上海劳力士维修哪里好?南京/北京/杭州等六大城高端腕表维修科普+正规门店指引 - 时光修表匠
  • 数学危机、经典悖论
  • AF405标记α-银环蛇d素,AF405-a-Bungarotoxin的分子基础与结构特性
  • 整厂回收厂家有哪些?陕西地区专业电线电缆等资源设备回收服务商真实推荐 - 深度智识库
  • 推荐:SortPhotos——照片智能整理神器
  • printf输出语句
  • 人工智能教程 - 前言
  • 简单分享沃尔玛电子卡回收的高效方案 - 猎卡回收公众号
  • 2026年野奢定制庄园住宿套餐评测报告:香格里拉设计感民宿/香格里拉避世民宿/香格里拉野奢度假/选择指南 - 优质品牌商家
  • STM32F072 CAN and USB
  • 在英伟达全栈 AI 基建布局下的GPU算力平台选择逻辑
  • 电工记
  • Deepagents与LangGraph集成指南:构建可扩展的AI代理系统
  • 2026 镀锌钢管 / 槽钢 / 工字钢厂家优选 实力品牌全维度推荐 - 深度智识库
  • 1949AI 轻量化 AI 自动化:批量图片文字提取与文档整理技术实践
  • 【实时Linux工业PLC解决方案系列】第四十篇 - 实时Linux PLC工业场景落地方案总结