1.项目结构
res资源文件与assets目录区别: res下的所有资源都会在R.java下生产唯一id, 而assets不会生成。
drawable:存放各种位图文件(png,jpg,gif,.9png等等),以及drawable类型的xml(如按钮切换的selector)
mipmap:(图片拷贝在该目录,AS会自动根据分辨率分配)
mipmap-hdpi:高分辨率,一般图片会放在这里面
mipmap-mdpi:中分辨率,一般兼容比较旧的设备
mipmap-xhdpi:超高分辨率,较高端的设备
mipmap-xxhdpi:超超高分辨率,高端移动设备
layout、 menu 布局文件、菜单文件
values:
demens:定义尺寸资源
strings:定义字符串资源
styles:定义样式资源
colors:定义颜色资源
arrays:定义数组资源
theme:定义主题
values-w820dp, values-v11等, w表示平板,820表示屏幕宽度,v11表示api11
raw:用于存放视频、音频、xml等资源文件,openRawResource(int id)获得资源的二进制流,该目录下的资源会在R.java下生成唯一id
animator:属性动画xml文件
anim:补间动画xml文件
2. Drawable总结
drawable一共有13种,命名必须是a-z,0-9,"."等,且不能数字开头,所有字符必须小写。
① ColorDrawable --- 颜色资源
ColorDrawable cDrawable = new ColorDrawable(0x00000000);
btn.setBackground(cDrawable);
xml:
Ps: java直接定义颜色时的格式必须为0x + 透明度(2位数)+ RGB(6位数)
② NinePatchDrawable --- .9图
点9图不能放在mipmap下,需要放在drawable下
点9图在AS下要有黑线,否则无法通过编译
xml:
③ ShapeDrawable --- 形状
定义几何图形的节点:
(1) shape:形状
visible:是否可见
shape:形状(ectangle - 矩形/正方形; oval - 椭圆/圆; line - 线短; ring - 环形)
innerRedius:当shape为ring时有效,表示环的内半径尺寸
innerRediusRatio:当shape为ring时有效,表示环内半径所占半径的比例。当设置了innerRedius时该属性会被忽略
thickness:当shape为ring时有效,表示环的厚度
thicknessRatio:当shape为ring时有效,表示环的厚度所占半径的比例。
useLevel:当shape为ring时有效,表示是否允许根据level来显示环的一部分
(2) size:尺寸
width: 图形形状宽度
height:图形形状高度
(3) gradient:渐变
startColor、centerColor、endColor:渐变的起始、中间、结束颜色
type:渐变类型(linear - 线性、 radial - 发散、 sweep - 平铺)
centerX、centerY:渐变中间颜色的X、Y坐标, 取值0-1
angle:只有type为linear时有效,表示渐变角度(45度倍数)
useLevel:判断是否根据level绘制渐变效果
(4) solid: 填充色
color:背景填充色,设置该属性会覆盖gradient的效果
(5) stroke: 边框
width、height:边框的宽度、高度
dashWidth, dashHeight: 边框虚线段的宽、高
(6) conner: 拐角
radius:拐角圆的半径(4个角)
topLeftRadius、topRightRadius、BottomLeftRadius、BottomRightRadius:四个角的弧线对应的半径
(7) padding:内间距
④ GradientDrawable 渐变,参考上面
⑤ BitmapDrawable 位图
以
src:图片资源
antialias:抗锯齿
filter:是否支持位图过滤, true时位图显示更光滑
dither: 是否对位图进行抖动处理
gravity: 位图比容器小时,设置位图的相对位置
titleMode:指定图片平铺填充容器的模式(disable - 整个图形拉伸平铺; clamp - 原图大小; repeat - 平铺;mirror - 镜像 ),设置该属性时 会忽略gravity
⑥ InsetDrawable 镶嵌
把一个drawable镶嵌到另一个drawable内部
以
drawable:如果引用的drawable为空,必须有一个drawable类型的子节点
visiable:设置drawable是否占空间
insetLeft/Right/Top/Buttom:设置上下左右的边距
⑦ ClipDrawable 剪切 - 通过level值控制 - 最大10000
可以理解为在位图上剪掉一部分,Android的进度条就是这样实现的。根节点为
clipOrietntion:设置剪切的方向 -- 水平和竖直
gravity:从哪个位置开始剪切
drawable:如果引用的drawable为空,必须有一个drawable类型的子节点
⑧RotateDrawable 旋转 - 通过level控制 - 最大10000
以
fromDegrees:起始的角度,对应最低的level值,默认为0
toDegrees:结束角度,对应最高level值,默认为360
pivotX、pivotY:设置参照点x,y的坐标,取值0-1,默认50% --- 当旋转图片显示不完全时可以使用该值调整
visiable:设置drawable是否可见
⑨AnimationDrawable 帧动画 -- 适合不需要控制的动画
以
oneShot:设置是否循环播放,false表示循环
duration:帧间隔时间,一般设置为300秒
Ps:获取AnimationDrawable的实例后要用start()方法才会运行,并且不能再onCreate()方法里调用,因为view还没初始化完成。
①0 LayerDrawable 层位图 -- 包含一个drawable的数组,然后按照数组对应的顺序绘制它们,索引最大的会被绘制在最上层
以
drawable:位图资源
id:层id/索引
left、right、top、bottom:层相对于容器的上下左右边距
①① TransitionDrawable 过渡
LayerDrawable的一个子类,只管理2层,并提供透明度的变化。多余的item无效
可以使用startTransition()实现两层的播放效果,reverseTransition()实现反向播放
以
如果想实现多张图片的过渡效果:可以使用hander定时的修改两张图片
①② LevelListDrawable 管理一组图片,根据图片的level值绘制出来。
以
①③ StateListDrawable 状态选择器
以
drawable:位图
state_focused:是否获取到焦点
state_window_focused:是否获得窗口焦点
state_enabled:控件是否可用
state_checked:控件是否被勾选
state_checkable:控件是否能被勾选
state_selected:控件是否被选择,针对有滚轮的情况
state_pressed:控件是否被按下
state_active:控件是否处于激活状态
state_single:控件包含多个子控件时,确定是否只显示一个子控件
state_first:控件包含多个子控件时,确定第一个子控件是否显示
state_middle:控件包含多个子控件时,确定中间子控件是否显示
state_last:控件包含多个子控件时,确定最后一个子控件是否显示