Android:使用 setY() 为视图设置动画

Android: animate a view with setY()

我想为一个简单的视图设置动画,例如一个简单的文本视图。我想使用翻译动画视图。

现在我的要求是,我想做一个方法,比如说slide(View v, float position)。这将使视图动画化并定位到应该动画化的位置。我将从我的代码中的所需位置调用该方法。

为了做到这一点,我尝试了一些东西。我做了 MyTranslateAnimation class 如下。

public class MyTranslateAnimation extends Animation {

private View mView;
private final float position;

public MyTranslateAnimation(View view, float position){

    mView = view;
    this.position = position;
}

@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    mView.setY(position);
    mView.requestLayout();
}

}

然后我在 MainActivity.java 中创建了一个 textview 并设置了 onTouchListener 然后创建了这个方法 slide() 来完成我上面描述的任务。

代码如下: onCreate():

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    _root = (ViewGroup)findViewById(R.id.root);

    _view = new TextView(this);
    _view.setText("TextView!!!!!!!!");

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 50);
    layoutParams.leftMargin = 50;
    layoutParams.topMargin = 50;
    layoutParams.bottomMargin = -250;
    layoutParams.rightMargin = -250;
    _view.setLayoutParams(layoutParams);

    _view.setOnTouchListener(this);
    _root.addView(_view);
}

slide():

private void slide(View view, float position){
    Animation animation = new MyTranslateAnimation(view, position);
    animation.setInterpolator(new DecelerateInterpolator());
    animation.setDuration(200);
    animation.start();
}

如下所示,我使用了 slide() 方法:

public boolean onTouch(View view, MotionEvent event) {
    final int X = (int) event.getRawX();
    final int Y = (int) event.getRawY();
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
            _xDelta = X - lParams.leftMargin;
            _yDelta = Y - lParams.topMargin;
            break;
        case MotionEvent.ACTION_UP:
            slide(view, 100);
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
            layoutParams.leftMargin = X - _xDelta;
            layoutParams.topMargin = Y - _yDelta;
            layoutParams.rightMargin = -250;
            layoutParams.bottomMargin = -250;
            view.setLayoutParams(layoutParams);
            break;
    }
    _root.invalidate();
    return true;
}

我也不想为此使用 nineoldandroid 库。 非常感谢与此相关的任何帮助。

slide():

public void slide(float position){
    ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(overflow.get(), "translationY", position);
    objectAnimator.setInterpolator(new DecelerateInterpolator());
    objectAnimator.setDuration(200);
    objectAnimator.start();
}