动画 (Animation) 资源类型详述 (1)

详细介绍程序资源的使用,格式和语法,包括

①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文件夹中,

语法规则:



    

    

    
        ...
    

表示集合,集合可以包括代表对象的和包括数值的,也可以包括集合自己,可以对相关的属性进行设置。比如set有个属性ordering有可以填写两个数值,together表示所有的animator同时执行,sequentially表示按照布局文件先后执行。

可以写个xml文件实际感受到这些属性的作




    

    

源码在appresources目录里面。

先建立一个对象,这个对象包括很多属性,比如alpha,位置坐标,颜色,形状等。

通过Animator就可以动态地改变这些属性值显示不同的效果。

动画 (Animation) 资源类型详述 (1)_第1张图片

点击按钮,四个球开始运动,第一个球按照模拟物体落地,使用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属性值,点击按钮的时候按钮的文本会变成红色。

你可能感兴趣的:(安卓开发指南)