《android开发艺术探索》读书笔记(六)--Drawable
接上篇《android开发艺术探索》读书笔记(五)--RemoteViews
【BitmapDrawable】
简单的图片
<!xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:antialias=["true"|"false"] --图片抗锯齿功能,应该开启 android:dither=["true"|"false"] --抖动效果,高质量图片在低质量屏幕上显示好效果,应该开启 android:filter=["true"|"false"] --过滤效果,图片拉伸或压缩时显示好效果,应该开启 android:gravity=["top"|"bottom"|"left"|"right"|"center_vertical"|"fill_vertical"|"center_horizontal"|"fill_horizontal"|"center"|"fill"|"clip_vertical"|"clip_horizontal"] --定位 android:mipMap=["true"|"false"] --纹理映射,默认false,不常用 android:tileMode=["disabled"|"clamp"|"repeat"|"mirror"]/> --平铺模式,repeat普通平铺,mirror镜面投影,clamp周围扩散
【NinePatchDrawable】
.9图
<!xml version="1.0" encoding="utf-8"?> <nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@[package:]drawable/drawable_resource" android:dither=["true"|"false"]/>
【ShapeDrawable】
通过颜色来构造的图形,即<shape>标签,百度一搜一堆,这里就不写了
【LayerDrawable】
对应XML标签是<layer-list>,表示一种层次化的Drawable集合,通过将不同的Drawable放置在不同的层上面从而达到一种叠加后的效果
一个layer-list中可以包含多个item,每个item表示一个Drawable
<!xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#0ac39e"/> </shape> </item> <item android:bottom="6dp"> <shape android:shape="rectangle"> <solid android:color="#ffffff"/> </shape> </item> <item android:bottom="1dp" android:left="1dp" android:right="1dp"> <shape android:shape="rectangle"> <solid android:color="#ffffff"/> </shape> </item> </layer-list>
【StateListDrawable】
对应<selector>标签,百度一搜一堆,这里就不讲了
【LevelListDrawable】
对应于<level-list>标签,同样表示一个Drawable集合,集合中的每个Drawable都有一个等级level的概念,根据不同等级,会切换为对应的Drawable
每个item表示一个Drawable,并有等级范围,由minLevel和maxLevel来指定,在最小值和最大值之间的等级会对应此item中的Drawable,通过Drawable的setLevel方法来设置背景图片,setImageLevel方法来设置前景图片,等级范围0~10000
<!xml version="1.0" encoding="utf-8"?> <level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/status_off" android:maxLevel="0"/> <item android:drawable="@drawable/status_on" android:maxLevel="1"/> </levle-list>
【TransitionDrawable】
对应于<transition>标签,用于实现两个Drawable之间的淡入淡出效果
<!xml version="1.0" encoding="utf-8"?> <transition xmlns:android="http://schema.android.com/apk/res/android"> <item android:drawable="@drawable/drawable1"/> <item android:drawable="@drawable/drawable2"/> </transition>
<TextView android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/transition_drawable"/>
通过startTransition和reverseTransition方法来实现淡入淡出效果
TextView textView = (TextView)findViewById(R.id.test_transition); TransitionDrawable drawable = (TransitionDrawable)textView.getBackground(); drawable.startTransiton(1000);
【InsetDrawable】
对应于<inset>标签,可以将其他Drawable内嵌到自己当中,并可以在四周留出一定的间距(类似于padding或margin效果)
<!xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetBottom="15dp" android:insetLeft="15dp" android:insetRight="15dp" android:insetTop="15dp"> <shape android:shape="rectangle"> <solid android:color="#ff0000"/> </shape> </inset>
【ScaleDrawable】
对应于<scale>标签,根据自己的等级(level)将指定的Drawable缩放到一定比例
例:缩小为原大小的30%
<!xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/image1" android:scaleHeight="70%" android:scaleWidth="70%" android:scaleGravity="center"/>
View testScale = findViewById(R.id.test_scale); ScaleDrawable testScaleDrawable = (ScaleDrawable)testScale.getBackground(); testScaleDrawable.setLevel(1);
等级范围0~10000,必须设置为大于0
【ClipDrawable】
对应于<clip>标签,可以根据当前的等级level来剪裁另一个Drawable,剪裁方向可以通过clipOrientation(裁剪方向)和gravity两个属性共同控制
例:从上往下裁剪20%
<!xml version="1.0" encoding="utf-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:clipOrientation="vertical" android:drawable="@drawable/image1" android:gravity="bottom"/>
<ImageView android:id="@+id/test_clip" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/clip_drawable" android:gravity="center"/>
ImageView testClip = (ImageView)findViewById(R.id.test_clip); ClipDrawable testClipDrawable = (ClipDrawable)testClip.getDrawable(); testClipDrawable.setLevle(8000);
等级level的范围0~10000,0表示完全裁剪,10000表示不裁剪
【自定义Drawable】
重写draw方法
当自定义Drawable有固定大小时最好重写getIntrinsicWidth和getIntrinsicHeight方法
相关文章
- android中的加密算法,Android中加密算法[通俗易懂]
- 基于chromium for android开发Android浏览器
- Android开发-API指南- Calendar Provider
- android 定时器重置,Android定时器延迟和重置[通俗易懂]
- [译] Android 生命周期备忘录 — 第一部分:单一 Activities
- 【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
- android 加载dwg 图纸解决方案
- 【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- 【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
- Android ConstraintLayout约束布局的居中详解手机开发
- Android实现两次点击后退键退出程序详解手机开发
- Android 路由设计最佳实践详解手机开发
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- [android] 新闻客户端实现左侧导航点击切换详解手机开发
- android Universal Image Loader for Android 说明文档 (1)详解手机开发
- Android开发之50个常见实用技巧——添加悦目的动画效果详解手机开发
- 初识Android详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- android获得sdcard大小及使用情况信息详解编程语言
- Android开发笔记今天学到的一些属性
- Android中应用界面主题Theme使用方法和页面定时跳转应用
- Android开发学习笔记Gallery和GridView浅析
- 使用adb命令向Android模拟器中导入通讯录联系人的方法