利用属性动画将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

方法一

    //该方式存在的问题: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




方式二

    //------>以下为利用属性动画将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




coloranimation.xml




setanimator.xml











translateranimatior.xml

 


10/10/2015 10:16:44 AM

你可能感兴趣的:(利用属性动画将Button变宽)