详细介绍程序资源的使用,格式和语法,包括
①Animation Resources
动画资源,Tween动画(Tween动画是操作某个控件让其展现出旋转、渐变、移动、缩放的过程)保存在res/anim资源文件中,Frame动画保存在res/drawable资源文件中。
②颜色状态资源
定义在res/color/文件夹中。
③Drawable资源
定义在res/drawable/文件夹中。
④布局资源
定义在res/layout/文件夹中。
⑤菜单资源
定义在res/menu/文件夹中。
⑥字符串资源
可以定义字符串,字符串数组,和plurals (一种可以像printf函数那样进行格式化输出的字符串),保存在res/values/文件夹中,分别通过R.string, R.array, R.plurals进行访问。
⑦样式资源
定义界面的外观和格式,保存在res/values/文件夹中,使用R.style进行访问。
⑧字体资源
保存在res/font/文件夹中,使用R.font进行访问。
⑨其它资源
Bool, Color, Dimension, ID, Integer, Integer Array, Typed Array.
1.Animation
Animation有两种:Property Animation通过Animator类在一段时间内修改对象的属性来创建动画。
View Animation分为两种,Tween animation 通过Animation函数在一个图像上进行变换 (平移、缩放)操作来创建动画,Frame animation 通过AnimationDrawable类有序地显示一系列的图片来创建动画。
Property animation保存在res/animator文件夹中,
语法规则:
...
可以写个xml文件实际感受到这些属性的作
源码在appresources目录里面。
先建立一个对象,这个对象包括很多属性,比如alpha,位置坐标,颜色,形状等。
通过Animator就可以动态地改变这些属性值显示不同的效果。
点击按钮,四个球开始运动,第一个球按照模拟物体落地,使用BoundInterpolator,官方定义大概十个插补器,需要具体的操作才能知道效果。
AccelerateDecelerateInterpolator, AccelerateInterpolator, AnticipateInterpolator, BounceInterpolator
等,可以修改代码进行实践。
/**
* pvhY = PropertyValuesHolder.ofFloat("y", ball.getY(),
* getHeight() - BALL_SIZE);
* PropertyValuesHolder pvhAlpha = PropertyValuesHolder.ofFloat("alpha", 1.0f, 0f);
* ObjectAnimator yAlphaBouncer = ObjectAnimator.ofPropertyValuesHolder(ball,
* pvhY, pvhAlpha).setDuration(DURATION/2);
* yAlphaBouncer.setInterpolator(new AccelerateInterpolator());
* yAlphaBouncer.setRepeatCount(1);
* yAlphaBouncer.setRepeatMode(ValueAnimator.REVERSE);
*
*/
set = (AnimatorSet) AnimatorInflater.loadAnimator(
PropertyAnimation.this, R.animator.ball_y_alpha);
set.setTarget(ball);
ball = balls.get(2);
PropertyValuesHolder pvhW = PropertyValuesHolder.ofFloat("width", ball.getWidth(),
ball.getWidth() * 2);
PropertyValuesHolder pvhH = PropertyValuesHolder.ofFloat("height", ball.getHeight(),
ball.getHeight() * 2);
PropertyValuesHolder pvTX = PropertyValuesHolder.ofFloat("x", ball.getX(),
ball.getX() - BALL_SIZE / 2f);
PropertyValuesHolder pvTY = PropertyValuesHolder.ofFloat("y", ball.getY(),
ball.getY() - BALL_SIZE / 2f);
ObjectAnimator whxyBouncer = ObjectAnimator.ofPropertyValuesHolder(ball, pvhW, pvhH,
pvTX, pvTY).setDuration(DURATION / 2);
whxyBouncer.setRepeatCount(1);
whxyBouncer.setRepeatMode(ValueAnimator.REVERSE);
用代码写这些动态的效果很麻烦,所以推荐使用xml文件定义,简单直观。
Frame animation是预制一组连贯的图片,本例中使用的是桃心,连续加载不同刻度的桃心显示动态的效果。
public class FrameAnimation extends Activity {
ConstraintLayout layout;
ImageView heartImage;
AnimationDrawable heartAnimation;
// 控制动画的运行和停止。
boolean toggle;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.button);
layout = findViewById(R.id.container);
layout.setBackgroundColor(getColor(R.color.cyan));
heartImage = new ImageView(this);
heartImage.setBackground(getDrawable(R.drawable.ic_heart));
heartAnimation = (AnimationDrawable) heartImage.getBackground();
toggle = true;
layout.addView(heartImage);
}
public void sendMessage(View view) {
toggle ^= true;
heartAnimation.start();
if (heartAnimation.isRunning() && toggle) {
heartAnimation.stop();
}
}
}
最后是Tween animation,通过旋转,缩放,拉伸等形式改变图片的显示,参考源码可以看到指南针变形的动画。
xml文件存放在res/anim/文件夹下面。
2.Color state list
根据不同的状态显示不同的颜色值,定义个按钮,让它的文本根据不同的状态颜色发生变化。
xml文件存放在res/color/目录下面。
设置textColor属性值,点击按钮的时候按钮的文本会变成红色。