高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > 动画 (Animation) 资源类型详述 (1)

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

时间:2021-04-28 22:45:15

相关推荐

动画 (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文件夹中,

语法规则:

<setandroid:ordering=["together" | "sequentially"]><objectAnimatorandroid:propertyName="string"android:duration="int"android:valueFrom="float | int | color"android:valueTo="float | int | color"android:startOffset="int"android:repeatCount="int"android:repeatMode=["repeat" | "reverse"]android:valueType=["intType" | "floatType"]/><animatorandroid:duration="int"android:valueFrom="float | int | color"android:valueTo="float | int | color"android:startOffset="int"android:repeatCount="int"android:repeatMode=["repeat" | "reverse"]android:valueType=["intType" | "floatType"]/><set>...</set></set>

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

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

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="/apk/res/android"android:ordering="together"><objectAnimatorandroid:propertyName="y"android:duration="750"android:valueFrom="200"android:valueTo="700"android:repeatCount="1"android:repeatMode="reverse"/><objectAnimatorandroid:propertyName="alpha"android:duration="750"android:valueFrom="1.0"android:valueTo="0"android:repeatCount="1"android:repeatMode="reverse"/></set>

源码在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;@Overrideprotected 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/文件夹下面。

<scaleandroid:interpolator="@android:anim/accelerate_decelerate_interpolator"android:fromXScale="1.0"android:toXScale="1.4"android:fromYScale="1.0"android:toYScale="0.6"android:pivotX="50%"android:pivotY="50%"android:fillAfter="false"android:duration="700" /><setandroid:interpolator="@android:anim/accelerate_interpolator"android:startOffset="700"><scaleandroid:fromXScale="1.4"android:toXScale="0.0"android:fromYScale="0.6"android:toYScale="0.0"android:pivotX="50%"android:pivotY="50%"android:duration="400" /><rotateandroid:fromDegrees="0"android:toDegrees="-45"android:toYScale="0.0"android:pivotX="50%"android:pivotY="50%"android:duration="400" /></set>

2.Color state list

根据不同的状态显示不同的颜色值,定义个按钮,让它的文本根据不同的状态颜色发生变化。

xml文件存放在res/color/目录下面。

<selector xmlns:android="/apk/res/android"><item android:state_pressed="true"android:color="#ffff0000" /> <!-- pressed --><item android:state_focused="true"android:color="#ff0000ff" /> <!-- focused --><item android:color="#00ffff" /> <!-- default --></selector>

设置textColor属性值,点击按钮的时候按钮的文本会变成红色。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。