android属性动画的自定义属性 - gmtalang/test GitHub Wiki

  • 上次说的属性动画的满足条件,其中有一个就是提供了get()/set()方法,来提供让我们对封装起来的属性进行修改。

  • 我们通常知道的类似translationY,translationX,translation,alpha...点暴漏出了可供修改的方法。

  • 这里就明白了,我们可以提供一个包装类,给那些本身没有get()/set()方法的控件提供方法

  • 或者直接给我们自定义类的自身属性提供get()/set()方法,那就完美了。

  • 说个看到过的例子,就像button控件,它的宽度width没有暴露出方法,我们就可以这样

  • @Override

  • public void onClick(View v) {

  • if (v == mButton) {    
    
  •     performAnimate();    
    
  • }    
    
  • }

  • [java] view plain copy

  • private void performAnimate() {

  • ViewWrapper wrapper = new ViewWrapper(mButton);    
    
  • ObjectAnimator.ofInt(wrapper, "width", 500).setDuration(5000).start();    
    
  • }

  • [java] view plain copy

  • private static class ViewWrapper {

  • private View mTarget;    
    
  • public ViewWrapper(View target) {    
    
  •     mTarget = target;    
    
  • }    
    
  • public int getWidth() {    
    
  •     return mTarget.getLayoutParams().width;    
    
  • }    
    
  • public void setWidth(int width) {    
    
  •     mTarget.getLayoutParams().width = width;    
    
  •     mTarget.requestLayout();    
    
  • }    
    
  • }