android动画基础(一) View动画和属性动画
来源:互联网 发布:淘宝联盟链接转换工具 编辑:程序博客网 时间:2024/05/17 02:33
view动画
1.透明度动画
//float fromAlpha, float toAlphaAlphaAnimation aa = new AlphaAnimation(0, 1); aa.setDuration(1000); view.startAnimation(aa);
2.旋转动画
//float fromDegrees, float toDegrees, float pivotX, float pivotY pivot为相对view左上角旋转的坐标 RotateAnimation ra = new RotateAnimation(0, 360, 100, 100); ra.setDuration(1000); view.startAnimation(ra);//相对于自己旋转//float fromDegrees, float toDegrees, int pivotXType,float pivotXValue,int pivotYType, float pivotYValueRotateAnimation ra = new RotateAnimation(0, 360, RotateAnimation.RELATIVE_TO_SELF, 0.5F, RotateAnimation.RELATIVE_TO_SELF, 0.5F); ra.setDuration(1000); view.startAnimation(ra);
3.位移动画
//float fromXDelta, float toXDelta, float fromYDelta, float toYDelta TranslateAnimation ta = new TranslateAnimation(0, 200, 0, 300); ta.setDuration(1000); view.startAnimation(ta);
4.缩放动画
//float fromX, float toX, float fromY, float toY 从0到自己的两倍大小。以左上角为基点。 ScaleAnimation sa = new ScaleAnimation(0, 2, 0, 2); sa.setDuration(1000); view.startAnimation(sa);//以中心为基点缩放ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5F, Animation.RELATIVE_TO_SELF, 0.5F); sa.setDuration(1000); view.startAnimation(sa);
5.动画集合和监听
AnimationSet as = new AnimationSet(true); as.setDuration(1000); AlphaAnimation aa = new AlphaAnimation(0, 1); aa.setDuration(1000); as.addAnimation(aa); TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 200); ta.setDuration(1000); as.addAnimation(ta); view.startAnimation(as);as.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } });
属性动画
基本api
ObjectAnimator ob = ObjectAnimator.ofFloat(object,"translationX",300); ob.setDuration(2000); ob.start();
属性有:translationX/Y 从view布局容器左上角坐标偏移位置
rotation rotationX/y 三个属性控制view对象围绕他的支点进行2D 3D旋转
scaleX/Y 控制的是围绕着支点的缩放
pivotX/y 控制View对象的支点 默认是中心点
x,y View 对象在容器中的最终位置,是最初左上角坐标和translationX/Y的值累计和
alpha 透明度,1 不透明 0完全透明
自定义属性动画 提供seter/getter即可
private static class WrapperView { private View mTarget; public WrapperView(View target) { mTarget = target; } public int getWidth() { return mTarget.getLayoutParams().width; } public void setWidth(int width) { mTarget.getLayoutParams().width = width; mTarget.requestLayout(); } } //使用 WrapperView vi = new WrapperView(alpha);ObjectAnimator.ofInt(vi,"width",500).setDuration(2000).start();
多个属性同时使用的api propertValuesHolder
PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationX",300f);PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX",1f,0,1f);PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("scaleY",1f,0,1f); ObjectAnimator.ofPropertyValuesHolder(alpha,pvh1,pvh2,pvh3).setDuration(2000).start();
属性动画的核心 ValueAnimator
ValueAnimator va = ValueAnimator.ofFloat(0,100); va.setTarget(value); va.setDuration(2000).start(); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float values = (float) animation.getAnimatedValue(); Log.i("数值",values+""); } });
属性动画的监听
ob.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); //简单实现 va.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } });
更好的set集合动画控制
其他方法 playTogether(),playSequentially(),animSet.play().width()、before()、after()
ObjectAnimator animator1 = ObjectAnimator.ofFloat(alpha, "translationX", 300f); ObjectAnimator animator2 = ObjectAnimator.ofFloat(alpha, "scaleX", 1f, 0, 1f); ObjectAnimator animator3 = ObjectAnimator.ofFloat(alpha, "scaleY", 1f, 0, 1f); AnimatorSet set = new AnimatorSet(); set.setDuration(2000); set.playTogether(animator1,animator2,animator3); set.start();
xml使用属性动画
<?xml version="1.0" encoding="utf-8"?><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:propertyName="scaleX" android:valueFrom="1.0" android:valueTo="2.0" android:valueType="floatType"></objectAnimator> private void scaleX(View v){ Animator anim = AnimatorInflater .loadAnimator(this,R.animator.animator); anim.setTarget(v); anim.start(); }
View的animate方法
animate.animate().alpha(0).y(300).setDuration(2000).withStartAction(new Runnable() { @Override public void run() { } }).withEndAction(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { } }); } }).start();
android布局动画 即addView时的动画 默认的是
android:animateLayoutChanges="true"//不可自定义 逐渐显示的过渡动画
自定义
ll = (LinearLayout) findViewById(R.id.ll); //设置过渡动画 ScaleAnimation sa = new ScaleAnimation(0, 1, 0, 1); sa.setDuration(2000); LayoutAnimationController lc = new LayoutAnimationController(sa, 0.5f); lc.setOrder(LayoutAnimationController.ORDER_NORMAL); //设置布局动画 ll.setLayoutAnimation(lc);
LayoutAnimationController.ORDER_NORMAL 顺序
LayoutAnimationController.ORDER_RANDOM 随机
LayoutAnimationController.ORDER_REVEESE 反序
自定义动画
@Override protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); Matrix matrix = t.getMatrix(); xxxxxxx }
电视机关闭效果
@Override protected void applyTransformation(float interpolatedTime, Transformation t) { Matrix matrix = t.getMatrix(); matrix.preScale(1, 1 - interpolatedTime, width,height); super.applyTransformation(interpolatedTime, t); }
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight); setDuration(2000); setFillAfter(true); setInterpolator(new BounceInterpolator()); w = width / 2; h = height / 2;}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) { Matrix matrix = t.getMatrix();// matrix.preScale(1, 1 - interpolatedTime, w,h); mCamera.save(); //设置旋转角度 mCamera.rotate(0, 180, 360); mCamera.restore(); //通过pre方法设置矩形作用前的偏移量来改变旋转中心 matrix.preTranslate(w, h); matrix.postTranslate(-w, -h); super.applyTransformation(interpolatedTime, t);}
- android动画基础(一) View动画和属性动画
- Android属性动画和View动画(补间动画)
- Android---动画机制(一)---View动画和帧动画
- Android动画--属性动画--基础
- Android动画--属性动画总结(一)
- Android动画机制-属性动画(一)
- 动画之基础动画(view动画)
- Android动画解析 View动画,帧动画与属性动画
- android动画系列(一):动画基础
- Android动画学习-视图动画&属性动画(一)
- Android View动画<一>
- Android 属性动画和View动画的特别之处
- Android动画 帧动画、补间动画、属性动画 (一)
- Android 属性动画 (一)
- Android 属性动画(一)
- android属性动画--基础
- Android属性动画基础
- android属性动画基础
- Java8 Lambda表达式教程
- 反射的简单应用2
- redis集群实现(三)集群删除节点
- 对USB同步传输feedback的一点理解
- [C++ Primer Plus]预备知识
- android动画基础(一) View动画和属性动画
- CISSP复习笔记-第3章 访问控制
- 《OpenCV》Part2 OpenCV3.1.0调用摄像头显示视频并拍照
- js原型对象与原型链
- 关于初学面向对象
- 关于SpringMVC中的国际化
- 【软件设计师考试】面朝大海,春暖花开
- java基础-hashmap分析
- java8新特性(八):Optional