我有一个像 Merquee 一样从右到左的TranslateX动画的ImageButton ,所以它从右到左动画。现在,当我单击它时,什么也没发生。实际上单击不是执行,单击仅在imagebutton的实际位置上执行。
做什么建议?非常感谢...谢谢
我有一个像 Merquee 一样从右到左的TranslateX动画的ImageButton ,所以它从右到左动画。现在,当我单击它时,什么也没发生。实际上单击不是执行,单击仅在imagebutton的实际位置上执行。
做什么建议?非常感谢...谢谢
截至目前,改变 View 矩阵的 Animations只改变绘制视图的坐标,而不是 View 在 Layout 中的实际位置。onDraw()
因此,当调用该视图时,它只是一个画布变换。
因此,您可以setTranslationX(100)
将视图向右绘制一个 100 像素。但是,点击区域 ( getHitRect()
) 仍然在布局过程中分配给视图的同一位置。
或者,您实际上可以将视图放置在动画之后的位置,然后反向运行动画。
如果您想实际更改布局,则必须更改该视图LayoutParams
并更改其宽度/高度/边距。然后你将不得不requestLayout()
在每一帧动画上。
示例:这将为 FrameLayout 内视图的左边距设置动画:
//---assuming animated view is a child of Framelayout---
FrameLayout parent;
View animatedChild;
ValueAnimator animator = new ValueAnimator();
animator.setFloatValues(0,parent.getWidth()); //--slide out to right--
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
FrameLayout.LayoutParams params = animatedChild.getLayoutParams();
Float margin = (Float) valueAnimator.getAnimatedValue();
params.leftMargin = margin.intValue();
animatedChild.requestLayout();
}
});
animator.start();
使用 ObjectAnimator(对于以后的版本,然后是 Honeycomb)对您的对象进行动画处理,您可以使用以下代码作为参考:
RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout1);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
ObjectAnimator mover = ObjectAnimator.ofFloat(layout, "translationX",
width, -width);
mover.setDuration(10000);
mover.setRepeatMode(Animation.INFINITE);
mover.setRepeatCount(Animation.INFINITE);
mover.start();
如果您使用 Api 较低,那么 HoneyComb(如 Gingerbread)则使用此库: http: //nineoldandroids.com/
它将在我的设备中正常工作。
在开发我的android应用程序之前,我遇到了类似的问题。而且我发现动画在运行的时候,其实是在让图像层四处流动。所以你需要点击按钮的原始位置,这意味着如果按钮已经开始移动,你可能需要点击一个黑色的空间。