推荐阅读:Android studio的文件创建
res/anim:定义补间动画
res/animator:定义属性动画
res/drawable目录下:可定义帧动画、shape、selector、和图片
res/values目录下:可创建
arrays(字符串数组)、
attrs(自定义view的属性)、
colors(颜色)、
demens(尺寸)、
strings(字符串)、
styles(主题或布局参数)。
res/menu:定义菜单
res/raw:存放音乐、视频等
assets:注意不在res目录下,且与java、res、manifests同等级。
动画的定义
推荐阅读: 属性动画
1、res/anim:补间动画
1、定义:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0"
android:toXScale="0.5"
android:fromYScale="1.0"
android:toYScale="0.5"
android:pivotX="50%"
android:pivotY="50%"
android:duration="500" />
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500" />
</set>
2、引用:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim);
tv.setAnimation(animation);
2、res/drawable:帧动画
1、定义
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item
android:drawable="@mipmap/pull_end_image_frame_01"
android:duration="100" />
<item
android:drawable="@mipmap/pull_end_image_frame_02"
android:duration="100" />
<item
android:drawable="@mipmap/pull_end_image_frame_03"
android:duration="100" />
<item
android:drawable="@mipmap/pull_end_image_frame_04"
android:duration="100" />
<item
android:drawable="@mipmap/pull_end_image_frame_05"
android:duration="100" />
</animation-list>
2、引用
/* res/drawable 目录下的帧动画 */
tv.setBackgroundResource(R.drawable.animation_refresh_second);
AnimationDrawable animationDrawable = (AnimationDrawable) tv.getBackground();
animationDrawable.start();//开始播放
if (animationDrawable != null && animationDrawable.isRunning()) {
animationDrawable.stop(); //停止播放
}
3、res/animator : 属性动画
1、定义
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:valueFrom="-500"
android:valueTo="0"
android:valueType="floatType" />
<set android:ordering="together">
<objectAnimator
android:duration="3000"
android:propertyName="rotation"
android:valueFrom="0"
android:valueTo="360"
android:valueType="floatType" />
<set android:ordering="sequentially">
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType" />
<objectAnimator
android:duration="1500"
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
</set>
</set>
</set>
2、使用
Animator animator = AnimatorInflater.loadAnimator(this, R.animator.animator);
animator.setTarget(tv);
animator.start();
属性动画一般在代码中设置,如下:
AnimatorSet set = new AnimatorSet();
//平移
ObjectAnimator anim1 = ObjectAnimator.ofFloat(tv, "translationX", -500f, 0f);
anim1.setDuration(2000);
ObjectAnimator anim2 = ObjectAnimator.ofFloat(tv, "translationY", 0f, -500f);
anim2.setDuration(2000);
//透明度
ObjectAnimator anim3 = ObjectAnimator.ofFloat(tv, "alpha", 1f, 0f);//逐渐消失
anim3.setDuration(2000);
//旋转
ObjectAnimator anim4 = ObjectAnimator.ofFloat(tv, "rotationX", 180f, 0f);
anim4.setDuration(2000);
ObjectAnimator anim5 = ObjectAnimator.ofFloat(tv, "rotationY", 0f, 180f);
anim5.setDuration(2000);
//缩放
ObjectAnimator anim6 = ObjectAnimator.ofFloat(tv, "scaleX", 0.5f);//x轴缩小一半
anim6.setDuration(1000);
ObjectAnimator anim7 = ObjectAnimator.ofFloat(tv, "scaleY", 0.5f);//y轴缩小一半
anim7.setDuration(1000);
set.play(anim1).before(anim2);
set.play(anim3).before(anim4);
set.play(anim5).before(anim6);
set.play(anim1).before(anim7);
set.start();
res/value/XXX
1、res/value/arrays:字符串数组
推荐阅读:Android:entries的使用
1、定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="week_day">
<item>周日</item>
<item>周一</item>
<item>周二</item>
<item>周三</item>
<item>周四</item>
<item>周五</item>
<item>周六</item>
</string-array>
</resources>
2、引用
/* res/value/arrays 目录下 */
String[] items = getResources().getStringArray(R.array.week_day);
2、res/value/attrs:自定义view的自定义属性
1、定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--自定义属性-->
<declare-styleable name="TagFlowLayout">
<attr name="auto_select_effect" format="boolean"></attr>
<attr name="max_select" format="integer"></attr>
<attr name="gravity">
<enum name="left" value="-1" />
<enum name="center" value="0" />
<enum name="right" value="1" />
</attr>
</declare-styleable>
</resources>
2、引用:自定义view的构造方法中
public TagFlowLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
//读取attrs中资源
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout);
//第一个参数,读取attrs中参数名,是以“样式名_参数名”的形式。
//第二个参数,是默认值,如果从xml中获取不到则使用默认值。
mAutoSelectEffect = ta.getBoolean(R.styleable.TagFlowLayout_auto_select_effect, true);
//TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性
ta.recycle();
}
3、res/value/colors:颜色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
4、res/value/dimens:尺寸
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="padding_small">8dp</dimen>
<dimen name="padding_medium">8dp</dimen>
<dimen name="padding_large">16dp</dimen>
</resources>
5、res/value/strings :字符串
<resources>
<string name="app_name">MyResource</string>
<!-- 下载新版app -->
<string name="download_percent">下载:&lt;font color="#ff0000"&gt;%1$s&lt;/font&gt;%%</string>
<!-- 注册 -->
<string name="str_register_now">我要注册</string>
<string name="str_register_now2">立即注册</string>
</resources>
6、res/value/styles:自定义APP的主题,或布局参数
<resources>
<!--定义APP主题-->
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!--定义布局参数-->
<style name="text_white_8">
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">8dp</item>
</style>
<style name="text_white_10">
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">10dp</item>
</style>
</resources>
res/value下的引用:
res/value根节点都是resource
/* res/value/colors 目录下 */
int colors = R.color.colorAccent;
/* res/value/dimens 目录下 */
int dimens = R.dimen.padding_small;
/* res/value/strings 目录下 */
int strings = R.string.app_name;
/* res/value/styles 目录下 */
int styles = R.style.AppTheme;
res/drawable:定义shape或selector
推荐阅读:Android - shape 使用
定义:
normal_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#21BF64" />
<corners android:radius="30dp" />
<padding
android:bottom="2dp"
android:left="10dp"
android:right="10dp"
android:top="2dp" />
</shape>
checked_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#FFFFFF" />
<corners android:radius="30dp" />
<padding
android:bottom="2dp"
android:left="10dp"
android:right="10dp"
android:top="2dp" />
</shape>
btn_login_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checked_bg" android:state_focused="true"></item>
<item android:drawable="@drawable/checked_bg" android:state_pressed="true"></item>
<item android:drawable="@drawable/normal_bg"></item>
</selector>
使用:设置背景
//xml中
android:background="@drawable/normal_bg"
//或
android:background="@drawable/btn_login_selector"
//代码中
tv.setBackgroundResource(R.drawable.normal_bg);
//或
tv.setBackgroundResource(R.drawable.btn_login_selector);
res/raw:
raw属于隐藏文件夹,他放的是图片、音乐等资源(可以直接复制到设备中,不会被编译,并且不会被自动压缩,他会在R.java中生成对应的唯一ID);它区别于assets文件夹,assets文件夹用于存放需要打包到应用程序的静态文件,给文件夹下的文件不会被影射到R.java中(即不会生成对应的id)
引用:
InputStream is = getResources().openRawResource(R.raw.refresh_logo);
assets:
AssetManager am = null;
am = getAssets();
InputStream is = am.open("filename");
res/raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.Java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹