2012-01-15 38 views
2

我想在我的应用中包含一个简单动画,其中 视图 小部件移动到另一个 视图 小部件。Android - TranslateAnimate一个视图到另一个视图

我写的代码是:

TranslateAnimation animate = new TranslateAnimation(view1.getTranslationX(), view1.getTranslationY(), view2.getTranslationX(), view2.getTranlationY()); 
animate.setDuration(500); 
view1.startAnimation(animate); 

的问题是,view1ViewSwitcher继承而view2自定义视图是Button。 getTranslation()不给这种方法例外。

我怎样才能得到视图的屏幕上的位置,这是做动画的正确方法吗?

注:ViewSwitcherListView项目的一部分,所以它也需要越过其边界ListView才能到Button(以防万一有差别)。

回答

1

方法,如getTranslationX()getTranslationY()简单地返回了可以应用到实际的视图位置的偏移值,而不是该位置本身。您将要使用像getLeft()getTop()方法来获取视图相对于其父的X/Y位置值(在这种情况下,ListView)。

如果您需要更多的全局坐标,请使用getLocationInWindow()getLocationOnScreen()来获取视图相对于全局显示层次结构的位置。这些方法不返回的位置,而是填进你提供的参数int[]

所有这些方法可以在任何View调用。

HTH

+0

感谢您的回答。根据我所知道的,它可以工作,但是因为'view1'在'ListView'中,它就会消失。我认为它移动到了所需的位置,但是因为它在ListView中的其他视图背后,我看不到它。我尝试了bringToFront(),但这并没有帮助。有任何想法吗 ? – 2012-01-16 00:39:04

+0

对不起,有没有在你已经发布,使你所看到的问题的任何决定的代码/上下文的足够信息。 – Devunwired 2012-01-16 05:06:25

+0

嗯..我会尽力解释。 'view1'是一个'ListView'的图标。类似于您在联系人列表视图中显示的图片。 'view2'在同一个屏幕/ LinearLayout中的不同位置。类似于联系人应用中的标题。当我为图片设置动画时,它会移动,但不会超出“ListView”的边界。我在'ListView'上试过'.setClipChildren(false)',但它完全扭曲了整个视图。 – 2012-01-16 05:50:24

0

基本上,我不知道,如果你做的一切都是正确的..

对于我来说,实现动画Android是使用ViewFlipper最简单的方法。也许你应该考虑用它来包装你的观点。

在这里,您有关于时,利用翻译和阿尔法动画与ViewFlipper一些后你按照我的建议http://kevinrohling.wordpress.com/2011/01/25/using-a-slide-transition-with-viewflipper/

+0

好东西......但它似乎是关于活动视图之间的转换。我的问题是关于视图(小部件)在同一个屏幕上移动(一个在ListView中)。这是否适用于这种情况? – 2012-01-16 00:42:03

+0

刚编辑我的问题是多一点明确 – 2012-01-16 00:45:59

相关问题