我有一个 ImageButton ,带有 TranslateX 动画从右到左动画,就像Merquee一样,所以它从右到左动画。现在当我点击时没有发生任何事情。实际上点击不执行,只点击图像按钮的实际位置。
该怎么办?非常赞赏...谢谢
答案 0 :(得分:1)
截至目前,改变视图矩阵的动画仅更改绘制视图的坐标,而不更改视图在布局中的实际位置。因此,当调用该视图的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();
答案 1 :(得分:1)
使用ObjectAnimator(对于更高版本,然后是Honeycomb)用于Animatinfg你的对象,你可以使用以下代码作为参考:
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(如姜饼)则使用此库:http://nineoldandroids.com/
它将在我的设备中工作。
答案 2 :(得分:0)
在开发我的Android应用程序之前,我遇到了类似的问题。我发现动画正在运行时,它实际上正在使图像层流动。因此,您需要单击按钮的原始位置,这意味着如果按钮已开始移动,您可能需要单击黑色空间。