没有Accessor注册.通用补间引擎

Chr*_*sco 1 android tween universal imageview

我创建了以下访问器,以便将一个简单的补间添加到imageview的位置.我正在使用RelativeLayout.

public class ImageViewAccessor implements TweenAccessor<ImageView> {

     public static final int X = 1;
     public static final int Y = 2;
     public static final int XY = 3;

    @SuppressLint("NewApi")
    public int getValues(ImageView target, int tweenType, float[] returnValues) {
         switch (tweenType) {
             case X: returnValues[0] = target.getX(); return 1;
             case Y: returnValues[0] = target.getY(); return 1;
             case XY:
                 returnValues[0] = target.getX();
                 returnValues[1] = target.getY();
                 return 2;
             default: assert false; return 0;
         }
     }

    @SuppressLint("NewApi")
     public void setValues(ImageView target, int tweenType, float[] newValues) {    
         switch (tweenType) {
             case X: target.setX(newValues[0]); break;
             case Y: target.setY(newValues[1]); break;
             case XY:
                 target.setX(newValues[0]);
                 target.setY(newValues[1]);
                 break;
             default: assert false; break;
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码注册访问者:

Tween.registerAccessor(ImageViewAccessor.class, new ImageViewAccessor());
Tween.to(logo, ImageViewAccessor.Y, 1f).target(50).start();
Run Code Online (Sandbox Code Playgroud)

但我得到了一个崩溃"没有为目标找到TweenAccessor" Tween.to(logo, ImageViewAccessor.Y, 1f).target(50).start();所以我有2个问题.

  • 我可以使用此框架将简单补间添加到imageview(我希望图像悬停大约5 px然后向下5 px)?
  • 另外,如果我在调用函数之前注册了一个访问器,为什么会显示此错误?

编辑:另外, ImageView.getX()并且ImageView.getY()存在于API级11但我不知道是否应该使用,还是应该使用layaoutparamenters.topMargin

小智 6

我知道这个问题已经很老了,但无论如何我会回答以后搜索的人.

错误在于

Tween.registerAccessor(ImageViewAccessor.class, new ImageViewAccessor());
Run Code Online (Sandbox Code Playgroud)

第一个参数是您要访问的类,第二个参数是应该用于访问该类的Accessor.

你写的Sou想要访问ImageViewAccessor,但实际上你想使用ImageViewAccessor访问ImageView类.

它应该是这样的:

Tween.registerAccessor(ImageView.class, new ImageViewAccessor());
Run Code Online (Sandbox Code Playgroud)