Android中属性动画Property Animation使用示例(一)
发布日期:2021-06-30 11:14:50
浏览次数:2
分类:技术文章
本文共 6727 字,大约阅读时间需要 22 分钟。
MainActivity如下:
package cc.cn;import android.animation.Animator;import android.animation.AnimatorInflater;import android.animation.AnimatorListenerAdapter;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.animation.PropertyValuesHolder;import android.animation.Animator.AnimatorListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.ViewPropertyAnimator;import android.view.View.OnClickListener;import android.widget.Button;/** * Demo描述: * Android中属性动画Property Animation使用示例(一) * * 参考资料: * 1 http://blog.csdn.net/linmiansheng/article/details/18676845 * 说明了关于View动画的缺陷,即引入Property Animation的必要性 * 2 关于属性动画的中文文档,请参见: * http://blog.csdn.net/think_soft/article/details/7703684 * http://wiki.eoeandroid.com/Property_Animation * Thank you very much * */public class MainActivity extends Activity { private Button mScaleXButton; private Button mScaleXYButton; private Button mTranslateXButton; private Button mAlphaButton; private Button mAnimatorSetByCodesButton; private Button mPropertyValuesHolderButton; private Button mViewPropertyAnimatorButton; private ObjectAnimator mObjectAnimator1; private ObjectAnimator mObjectAnimator2; private ObjectAnimator mObjectAnimator3; private AnimatorSet mAnimatorSet1; private AnimatorSet mAnimatorSet2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ //--------->以下为在X方向上进行缩放的属性动画 mScaleXButton=(Button) findViewById(R.id.scaleXButton); mScaleXButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mObjectAnimator1.start(); } }); mObjectAnimator1=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.scalexanimator); mObjectAnimator1.setTarget(mScaleXButton); //--------->以下为在X和Y方向上进行缩放的属性动画 mScaleXYButton=(Button) findViewById(R.id.scaleXYButton); mScaleXYButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAnimatorSet1.start(); } }); mAnimatorSet1=(AnimatorSet)AnimatorInflater.loadAnimator(this, R.animator.setanimator); mAnimatorSet1.setTarget(mScaleXYButton); //--------->以下为在X方向上进行位移的属性动画 mTranslateXButton=(Button) findViewById(R.id.translateXButton); mTranslateXButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mObjectAnimator2.start(); } }); mObjectAnimator2=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.translatexanimator); mObjectAnimator2.setTarget(mTranslateXButton); //--------->以下为透明度变化的属性动画 mAlphaButton=(Button) findViewById(R.id.alphaButton); mAlphaButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mObjectAnimator3.start(); } }); mObjectAnimator3=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.alphaanimator); mObjectAnimator3.setTarget(mAlphaButton); //--------->以下为在代码中实现AnimatorSet mAnimatorSetByCodesButton=(Button) findViewById(R.id.animatorSetByCodesButton); mAnimatorSetByCodesButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAnimatorSet2.start(); } }); mAnimatorSet2=new AnimatorSet(); //设置动画 mAnimatorSet2.playTogether( ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "alpha", 1,0,1), ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "translationX", 0f,400f,0f), ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "translationY", 0f,400f,0f), ObjectAnimator.ofFloat(mAnimatorSetByCodesButton, "rotation", 0,180,360) ); //设置动画时间 mAnimatorSet2.setDuration(2000); //设置动画监听 mAnimatorSet2.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animator) { System.out.println("---> onAnimationStart"); } @Override public void onAnimationRepeat(Animator animator) { System.out.println("---> onAnimationRepeat"); } @Override public void onAnimationEnd(Animator animator) { System.out.println("---> onAnimationEnd"); } @Override public void onAnimationCancel(Animator animator) { System.out.println("---> onAnimationCancel"); } }); //在代码中要实现一个对象不同属性的动画效果,除了AnimatorSet外 //还可利用PropertyValuesHolder和ViewPropertyAnimator对象来实现 //--------->以下为在代码中利用PropertyValuesHolder实现类似AnimatorSet的效果 mPropertyValuesHolderButton=(Button) findViewById(R.id.propertyValuesHolderButton); PropertyValuesHolder propertyValuesHolderX=PropertyValuesHolder.ofFloat("translationX", 0f,200f); PropertyValuesHolder propertyValuesHolderY=PropertyValuesHolder.ofFloat("translationY", 0f,200f); final ObjectAnimator objectAnimator =ObjectAnimator.ofPropertyValuesHolder(mPropertyValuesHolderButton, propertyValuesHolderX, propertyValuesHolderY); objectAnimator.setDuration(2000); mPropertyValuesHolderButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { objectAnimator.start(); } }); //在代码中要实现一个对象不同属性的动画效果,除了AnimatorSet外 //还可利用PropertyValuesHolder和ViewPropertyAnimator对象来实现 //--------->以下为在代码中利用ViewPropertyAnimator实现类似AnimatorSet的效果 mViewPropertyAnimatorButton=(Button) findViewById(R.id.viewPropertyAnimatorButton); mViewPropertyAnimatorButton.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { ViewPropertyAnimator viewPropertyAnimator=mViewPropertyAnimatorButton.animate(); //位移 viewPropertyAnimator.translationX(100f); //透明度 viewPropertyAnimator.alpha(0.5f); //监听 viewPropertyAnimator.setListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); } @Override public void onAnimationCancel(Animator animation) { super.onAnimationCancel(animation); } @Override public void onAnimationRepeat(Animator animation) { super.onAnimationRepeat(animation); } @Override public void onAnimationEnd(Animator animator){ //动画结束后将其透明度和位置还原 v.animate().alpha(1).translationX(0); } }); viewPropertyAnimator.start(); } }); }}main.xml如下:
alphaanimator.xml如下:
scalexanimator.xml如下:
setanimator.xml如下:
translatexanimator.xml如下:
转载地址:https://it9527.blog.csdn.net/article/details/23354841 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月24日 01时36分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
深度学习读书笔记之RBM
2021-07-03
记一次曲折的Debug经历
2021-07-03
Impala支持Google云存储开发笔记
2021-07-03
如何在Apache JIRA中搜索issue
2019-04-30
scrapy 排错记录
2019-04-30
ACM路上的一大失误
2019-04-30
HDOJ2049 不容易系列之(4)——考新郎
2019-04-30
CodeForces 248B - Chilly Willy - 找规律
2019-04-30
POJ-2418 Hardwood Species(Trie树)(map)
2019-04-30
HDU-4300 Clairewd’s message + 4333(扩展KMP)
2019-04-30
HDU 1592 Half of and a Half(高精度)
2019-04-30
POJ-3304 Segments(计算几何)
2019-04-30
UVA-11538 Chess Queen(数学)
2019-04-30
UVA-11401 Triangle Counting(数学优化)
2019-04-30
Codeforces Round #369 (Div. 2)
2019-04-30
UVA 11426 GCD - Extreme (II)(欧拉函数)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30