您的位置:首页 > 移动开发 > Android开发

Android Studio下的项目结构以及Drawable的使用

2016-04-15 14:44 477 查看
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:<color>#ff0000</color>

Ps: java直接定义颜色时的格式必须为0x + 透明度(2位数)+ RGB(6位数)

② NinePatchDrawable --- .9图

点9图不能放在mipmap下,需要放在drawable下

点9图在AS下要有黑线,否则无法通过编译

xml:<nine-patch src = "@drawable/ic_luncher"/>

③ 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 位图

以<bitmap>作为节点可选属性

src:图片资源

antialias:抗锯齿

filter:是否支持位图过滤, true时位图显示更光滑

dither: 是否对位图进行抖动处理

gravity: 位图比容器小时,设置位图的相对位置

titleMode:指定图片平铺填充容器的模式(disable - 整个图形拉伸平铺; clamp - 原图大小; repeat - 平铺;mirror - 镜像 ),设置该属性时     会忽略gravity

⑥ InsetDrawable  镶嵌

把一个drawable镶嵌到另一个drawable内部

以<inset>为节点可选属性

drawable:如果引用的drawable为空,必须有一个drawable类型的子节点

visiable:设置drawable是否占空间

insetLeft/Right/Top/Buttom:设置上下左右的边距

⑦ ClipDrawable 剪切 - 通过level值控制 - 最大10000

可以理解为在位图上剪掉一部分,Android的进度条就是这样实现的。根节点为<clip>可选属性

clipOrietntion:设置剪切的方向 -- 水平和竖直

gravity:从哪个位置开始剪切 

drawable:如果引用的drawable为空,必须有一个drawable类型的子节点

⑧RotateDrawable 旋转 - 通过level控制 - 最大10000

以<rotate>为节点,可选的根属性有:

fromDegrees:起始的角度,对应最低的level值,默认为0

toDegrees:结束角度,对应最高level值,默认为360

pivotX、pivotY:设置参照点x,y的坐标,取值0-1
4000
,默认50% --- 当旋转图片显示不完全时可以使用该值调整

visiable:设置drawable是否可见

⑨AnimationDrawable 帧动画 -- 适合不需要控制的动画

以<animotion-list>作为根节点可选属性:

oneShot:设置是否循环播放,false表示循环

duration:帧间隔时间,一般设置为300秒

Ps:获取AnimationDrawable的实例后要用start()方法才会运行,并且不能再onCreate()方法里调用,因为view还没初始化完成。

①0 LayerDrawable 层位图 -- 包含一个drawable的数组,然后按照数组对应的顺序绘制它们,索引最大的会被绘制在最上层

以<layer-list>为根节点可选属性:

drawable:位图资源

id:层id/索引

left、right、top、bottom:层相对于容器的上下左右边距

①① TransitionDrawable 过渡

LayerDrawable的一个子类,只管理2层,并提供透明度的变化。多余的item无效

可以使用startTransition()实现两层的播放效果,reverseTransition()实现反向播放

以<transition>为根节点,可选属性与LayerDrawable相同

如果想实现多张图片的过渡效果:可以使用hander定时的修改两张图片

①② LevelListDrawable 管理一组图片,根据图片的level值绘制出来。

以<level-list>为根节点,没有可选属性

<item>可选属性:drawable, minLevel, maxLevel:位图,level对应最小最大值

①③ StateListDrawable 状态选择器

以<selector>为根节点可选属性:

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:控件包含多个子控件时,确定最后一个子控件是否显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息