Анимация изображения и сделать его остановить в конце? - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь создать анимацию, которая при нажатии правой кнопки мыши перемещает изображение от того места, где оно находится справа от макета, а при нажатии левой кнопки мыши перемещает изображение от того места, где оно находится слева от макета.

Я сделал это до сих пор:

public class DenemeActivity extends Activity implements View.OnClickListener {

Button LeftSlide, RightSlide;
View image;
int width;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LeftSlide = (Button) findViewById(R.id.slideLeft);
    RightSlide = (Button) findViewById(R.id.slideRight);
    image = (View) findViewById(R.id.imageV);
    width = getWindowManager().getDefaultDisplay().getWidth(); ;
    LeftSlide.setOnClickListener(this);
    RightSlide.setOnClickListener(this);      

}

public void onClick(View v) {
    runOnAnimation(v.getId(), image);
}

void runOnAnimation(final int id, final View view) {

    AnimationSet animation = new AnimationSet(true);
    TranslateAnimation translateAnimation = null;

    int fromXDelta = view.getLeft();

    if(id == LeftSlide.getId())
        translateAnimation = new TranslateAnimation(fromXDelta, 0, 0, 0);
    else if(id == RightSlide.getId())
        translateAnimation = new TranslateAnimation(fromXDelta, width - view.getWidth() - fromXDelta , 0, 0);

    translateAnimation.setDuration(1000);
    animation.addAnimation(translateAnimation);
    animation.setAnimationListener(new AnimationListener() {

        public void onAnimationEnd(Animation v) {
            v.reset();
            view.clearAnimation();

            // Change view to state B by modifying its layout params and scroll
            if(id == LeftSlide.getId())
                view.layout(0, 0, view.getWidth(), view.getHeight());
            else if(id == RightSlide.getId())
                view.layout(width - view.getWidth(), 0, width, view.getHeight());               
        }

        public void onAnimationRepeat(Animation v) {}
        public void onAnimationStart(Animation v) {}
    });
    view.startAnimation(animation);
}    
}

Я проверил точки:

width = 480

fromXDelta = 408 (при нажатии слева)

Так что это действительно не вне границы, но когда я нажимаю на левую кнопку, изображение получается вне границы ??Что это может вызвать к этому?Заранее спасибо ...

1 Ответ

1 голос
/ 09 февраля 2012

Я думаю, что вы выбрали неправильный тип позиции для вида, который хотите переместить.Попытайтесь получить позицию вашего представления и выполните перевод следующим образом:

int fromPos = view.getLeft();
int toPos   = 0;
if(id == LeftSlide.getId()) {
  translateAnimation = new TranslateAnimation(fromPos, toPos, 0, 0);
} else {
  toPos = getWidth()-view.getWidth();
  translateAnimation = new TranslateAnimation(fromPos, toPos, 0, 0);
}

Это должно сработать.

...