视图动画不会改变触摸区域

5
在TranslateAnimation之后,被翻译的视图上的OnClickListener没有被翻译。我尝试通过自定义LinearLayout中的getHitRect来覆盖它,但没有成功。我还尝试使用touchdelegate和在整个互联网上找到的所有其他建议,但都没有成功 :)
TranslateAnimation open = new TranslateAnimation(0, displayWidth - ivTimelineWidth, 0, 0);
open.setDuration(1000);   
open.setFillAfter(true);
llMapContent.startAnimation(open);

请帮我一下 :)
朱利安
1个回答

7

如果我正确理解您的问题,您想在翻译后单击某些内容,但该内容并未注册该“something”的onTouch。发生此问题是因为TranslateAnimation实际上并未移动对象,只是屏幕上的像素。如果触摸该项目所在区域,则会调用onTouch。为了实际移动对象而不是屏幕上的像素,我建议使用以下代码片段:

MarginLayoutParams marginParams = new MarginLayoutParams(someobject.getLayoutParams());
marginParams.setMargins(xx, xx, xx, xx);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
someobject.setLayoutParams(layoutParams); 

你应该将这个代码放在onAnimationEndonAnimationStart方法中。希望这可以帮到你。

谢谢,看起来很有趣,但是使用你的代码片段后我的视图在动画结束时消失了... - Jul
你保留了 fillAftertrue 部分吗? - testingtester
好的,我用这段代码解决了问题。但是,在动画结束时,由于更改leftMargin时mapview被重新调整大小,所以它会闪烁。你有什么建议可以避免调整大小吗?http://pastebin.com/Ki3BEtUL - Jul
它不应该调整任何东西,但我从未移动过地图视图。我不确定为什么会发生这种情况。 - testingtester
我猜所有类型的布局都被重新调整大小了。实际上,新的宽度是displayWidth减去newLeftMargin。 - Jul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接