1

我创建了以下访问器,以便向 imageview 的位置添加一个简单的补间。我正在使用相对布局。

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;
         }
     }
}

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

Tween.registerAccessor(ImageViewAccessor.class, new ImageViewAccessor());
Tween.to(logo, ImageViewAccessor.Y, 1f).target(50).start();

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

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

编辑:另外, ImageView.getX()并且ImageView.getY()存在于 api 级别 11 中。但我不知道是否应该使用它们或者我应该使用layaoutparamenters.topMargin

4

1 回答 1

6

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

错误在

Tween.registerAccessor(ImageViewAccessor.class, new ImageViewAccessor());

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

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

它应该是这样的:

Tween.registerAccessor(ImageView.class, new ImageViewAccessor());
于 2013-07-01T19:11:32.907 回答