利用属性动画将Button变宽
来源:互联网 发布:淘宝店铺首页全屏大图 编辑:程序博客网 时间:2024/04/29 22:17
- 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
方法一
//该方式存在的问题: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);
动画文件 scalexanimator.xml
<?xml version="1.0" encoding="utf-8"?><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:duration="3000"android:propertyName="scaleX"android:repeatCount="1"android:repeatMode="reverse"android:valueFrom="1.0"android:valueTo="2.0" ></objectAnimator>
方式二
//------>以下为利用属性动画将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();}
一些文件
alphaanimator.xml
<?xml version="1.0" encoding="utf-8"?><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="alpha"android:duration="2500"android:valueFrom="1.0"android:valueTo="0"android:repeatCount="1"android:repeatMode="reverse"></objectAnimator>
coloranimation.xml
<?xml version="1.0" encoding="utf-8"?><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="backgroundColor" android:duration="5000" android:valueFrom="#ff0033" android:valueTo="#000099" android:repeatCount="infinite" android:repeatMode="reverse" android:valueType="intType"></objectAnimator>
setanimator.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together" ><objectAnimatorandroid:duration="3000"android:propertyName="scaleX"android:repeatCount="1"android:repeatMode="reverse"android:valueFrom="1.0"android:valueTo="2.0" ></objectAnimator><objectAnimatorandroid:duration="3000"android:propertyName="scaleY"android:repeatCount="1"android:repeatMode="reverse"android:valueFrom="1.0"android:valueTo="2.0" ></objectAnimator></set>
translateranimatior.xml
<?xml version="1.0" encoding="utf-8"?><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="translationX"android:duration="2000"android:valueFrom="0"android:valueTo="150"android:repeatCount="1"android:repeatMode="reverse"></objectAnimator>
10/10/2015 10:16:44 AM
0 0
- 利用属性动画将Button变宽
- 从点到面,给Button的属性动画
- JavaScript 动画之多个div同时变宽
- 利用属性动画实现进度条动画
- 利用Associative机制为UIAlertView添加一个Block属性,将AlertView与button的响应事件关联
- 利用scrollTop属性制作滚动动画
- 利用Android属性动画实现Banner控件
- 利用data-*属性与jq写动画
- 利用属性动画实现优酷菜单
- android 动画总结(利用属性动画做一个波浪)
- Button属性
- Button属性
- Button属性
- Button 属性
- 将Button的Enabled属性绑定到变量,并使两个不同Button的此属性互斥
- 利用css3属性:transition-duration来做简单的动画
- 利用MovieClip对象的rotationY属性实现翻转动画效果
- android 利用属性动画实现酷炫的圆形菜单
- LINUX磁盘加密之CRYPTO
- jQuery ajax的traditional参数的作用
- 自定义view CircleProgressBar
- 分治法--最大子数组
- Android Activity启动模式(launchMode)
- 利用属性动画将Button变宽
- 抓取网页数据并解析
- android学习日记02-安装androidstudio完成helloword
- eclipse 设置默认编码为Utf-8 详细教程。
- C语言变量类型与内存
- 22. Generate Parentheses
- spring 对于hibernate操作的封装 HibernateCallback接口的学习
- Canvas绘图
- Qt之QTextCodec乱谈