2015-11-22 6 views
2

Я хочу анимировать простой вид, скажем, например, простое текстовое представление. Я хочу использовать translate aimate view.Android: оживить представление с setY()

Теперь, что мое требование, я хочу сделать способ, скажем, например, slide(View v, float position). Который будет смотреть на оживление и положение до того места, где он должен быть анимирован. И я назову этот метод из желаемого места в моем коде.

Для этого я попытался что-то. Я сделал MyTranslateAnimation класс, как следует.

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

}

Тогда я сделал textview в MainActivity.java и установить 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 библиотеки для этого. Любая помощь по этому поводу очень ценится.

+1

В чем проблема с вашим кодом? Это может помочь, если вы задали вопрос – fractalwrench

+0

Итак? код не работает? Или работает, но не оживляет? или что-нибудь еще –

+0

@fractalwrench @SrujanBarai, спасибо, что ответили. На самом деле было так много проблем с этим кодом. Но после некоторых исследований я узнал о «ObjectAnimator», поэтому использовал его и обновил метод «slide()», после чего он сработал. Я отправил его в качестве ответа. –

ответ

3

slide():

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

 Смежные вопросы

  • Нет связанных вопросов^_^