TranslateAnimation ImageView

时间:2014-08-10 00:21:43

标签: android imageview translate-animation

我面临接下来的两个问题:

1)当我将图像视图从屏幕外部转换到屏幕内部时,当图像移动时,图像被裁剪,并且当完成移动图像视图修复并显示正常时。为什么会这样?

2)我使用translateAnimation将imageview从(0,0)移动到(300,0)。 我已经实现了触摸式监听器。当我尝试移动之前翻译的图像视图时,当我尝试用手指移动时,触摸不起作用,但如果用手指触摸位置(0,0),则图像视图会移动但图像不显示!我不明白发生了什么。 我尝试用手指将imageView移动到位置(300,0)但不起作用,当我触摸位置(0,0)时移动。但是如果我在x轴上移动例如100,则imageview不在位置(100,0),在(400,0)中!我不明白发生了什么。有些东西丢失了,我认为imageview保存了开始移动或某些东西的位置,我不明白。如果我将转换动画移到该imageview,ontouch工作正常!

我希望我很清楚。

以下是问题1的代码:

public void showImageFromOutside(ImageView image){

image.setImageResource(obtenerImagen(cartasJugador.get(0).toString()));
TranslateAnimation animation1 = new TranslateAnimation(100, 425, 100, 525);
animation1.setDuration(800);
animation1.setFillAfter(true);
animation1.setAnimationListener(animationListener);
image.startAnimation(animation1);
}

以下是问题2的代码:

public void moveImageView(Imageview image){

animation = new TranslateAnimation(0, 300, 0, 0);
animation.setDuration(250);
animation.setFillAfter(true);
animation.setAnimationListener(animationListener);
image.startAnimation(animation);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        seMueve = true;
        break;
    case MotionEvent.ACTION_MOVE:
        if (seMueve) {
            x = (int) event.getRawX() - v.getWidth()/2;
            y = (int) event.getRawY() - v.getHeight();
            v.setX(x);
            v.setY(y);
        }
        break;
    case MotionEvent.ACTION_UP:
        seMueve = false;
        break;
    }
    v.performClick();
    return seMueve;
}

迎接

1 个答案:

答案 0 :(得分:0)

看一看:

http://developer.android.com/guide/topics/graphics/prop-animation.html#property-vs-view

特别是

...视图动画系统的另一个缺点是它只修改了绘制视图的位置,而不是实际的视图本身。例如,如果您设置了一个按钮以在屏幕上移动,则该按钮会正确绘制,但您可以单击该按钮的实际位置不会更改,因此您必须实现自己的逻辑来处理此问题。

我认为您不能将onTouchListener与动画一起使用。你应该使用ObjectAnimator,它很简单。

如果您的API低于11,则可以尝试使用http://nineoldandroids.com/

此致