Android中属性动画Property Animation使用示例(四)
发布日期:2021-06-30 11:14:48
浏览次数:3
分类:技术文章
本文共 4206 字,大约阅读时间需要 14 分钟。
MainActivity如下:
package cc.cn;import android.animation.AnimatorInflater;import android.animation.IntEvaluator;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.animation.ValueAnimator.AnimatorUpdateListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * Demo描述: * 利用属性动画将Button变宽的四种方式示例 * * 参考资料: * 1 http://blog.csdn.net/singwhatiwanna/article/details/17841165 * 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 mScaleXFirstButton; private Button mScaleXSecondButton; private Button mScaleXThirdButton; private Button mScaleXFourthButton; private ObjectAnimator mObjectAnimator1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ //------>以下为利用属性动画将Button变宽的方式一 //该方式存在的问题:Button被拉伸的同时按钮中的文字亦被拉伸,效果不好. //解决方法:参见以下的方式二、三和四 mScaleXFirstButton=(Button) findViewById(R.id.scaleXFirstButton); mScaleXFirstButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mObjectAnimator1.start(); } }); mObjectAnimator1=(ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.scalexanimator); mObjectAnimator1.setTarget(mScaleXFirstButton); //------>以下为利用属性动画将Button变宽的方式二 //该方式中可将Button变宽. //但是存在一个问题: //布局文件中scaleXSecondButton宽度的设置是android:layout_width="wrap_content" //若将宽度改为一个具体的值比如250dip,那么此时是没有动画效果的. //解决办法参见方式三 mScaleXSecondButton=(Button) findViewById(R.id.scaleXSecondButton); mScaleXSecondButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ObjectAnimator.ofInt(mScaleXSecondButton, "width", 500).setDuration(2000).start(); } }); //------>以下为利用属性动画将Button变宽的方式三 //该方法解决了在方式二中的问题. //原因分析: //属性动画要求动画作用的对象提供该属性的get和set方法.即在此例中 //我们要修改的是对象的width属性.所以要有该属性对应的get和set方法 mScaleXThirdButton=(Button) findViewById(R.id.scaleXThirdButton); final ViewWrapper viewWrapper=new ViewWrapper(mScaleXThirdButton); mScaleXThirdButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ObjectAnimator.ofInt(viewWrapper, "width", 500).setDuration(2000).start(); } }); //------>以下为利用属性动画将Button变宽的方式四 //在该示例中主要采用了ValueAnimator mScaleXFourthButton=(Button) findViewById(R.id.scaleXFourthButton); mScaleXFourthButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startPropertyAnimation(mScaleXFourthButton,mScaleXFourthButton.getWidth(),500); } }); } private void startPropertyAnimation(final View target, final int startValue, final int endValue){ final IntEvaluator intEvaluator=new IntEvaluator(); //将动画值限定在(1,100)之间 ValueAnimator valueAnimator=ValueAnimator.ofInt(1,100); //动画持续时间 valueAnimator.setDuration(5000); //监听动画的执行 valueAnimator.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { //得到当前瞬时的动画值,在(1,100)之间 Integer currentAnimatedValue=(Integer) valueAnimator.getAnimatedValue(); //计算得到当前系数fraction float fraction=currentAnimatedValue/100f; System.out.println("currentAnimatedValue="+currentAnimatedValue+",fraction="+fraction); //评估出当前的宽度其设置 target.getLayoutParams().width=intEvaluator.evaluate(fraction, startValue, endValue); target.requestLayout(); } }); //开始动画 valueAnimator.start(); } private class ViewWrapper { private View mTargetView; public ViewWrapper(View target) { mTargetView = target; } public int getWidth() { return mTargetView.getLayoutParams().width; } public void setWidth(int width) { mTargetView.getLayoutParams().width = width; mTargetView.requestLayout(); } } }main.xml如下:
scalexanimator.xml如下:
转载地址:https://it9527.blog.csdn.net/article/details/23354223 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月18日 17时40分50秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tf dense layer两种创建方式的对比和numpy实现
2019-04-30
tf initializer
2019-04-30
tf 从RNN到BERT
2019-04-30
tf keras SimpleRNN源码解析
2019-04-30
tf keras Dense源码解析
2019-04-30
tf rnn输入输出的维度和权重的维度
2019-04-30
检验是否服从同一分布
2019-04-30
tf callbacks
2019-04-30
keras、tf、numpy实现logloss对比
2019-04-30
Ubuntu20.04安装微信
2019-04-30
Restful风格的使用
2019-04-30
Swagger基础入门整合SpringBoot
2019-04-30
MyBatisPlus简单入门(SpringBoot)
2019-04-30
攻防世界web进阶区NewsCenter详解
2019-04-30
攻防世界web进阶PHP2详解
2019-04-30
如何解决词达人问题(新)
2019-04-30
攻防世界web进阶区surpersqli详解
2019-04-30
攻防世界web进阶区easytornado详解
2019-04-30
攻防世界web进阶区web2详解
2019-04-30
xss-labs详解(上)1-10
2019-04-30