Android:在canvas翻译后点击/触摸事件不起作用

时间:2011-07-27 21:13:56

标签: android canvas translate invalidation ondraw

我有一个包含多个ImageView的FrameLayout。在主要活动中,我记录触摸事件,以便用手指移动我的FrameLayout和图像(拖动)。

为此,我在framelayout的onDraw中调用canvas.translate(x,y),它由activity touch事件处理程序中的invalidate()调用。

除了在翻译后,我无法点击我的ImageView,所有内容都像魅力一样。实际上,每个图像的点击监听器仍然在翻译之前的原始位置。

我已经读过我应该在翻译后手动更新每个图像的布局但是如何做到这一点?如果我用翻译值改变边距,那么图像将进一步增加两倍......

我真的很感激那个帮助。

干杯。

这是frameLayout,我在onDraw()方法中翻译画布(ImageView被添加到我的主Activity中的FrameLayout)。

public class TopView extends FrameLayout {

public float mPosX = 0;
public float mPosY = 0;

public TopView(Context context)
{
    super(context);
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(1920, 3200, Gravity.CENTER);
    this.setLayoutParams(lp);
    setWillNotDraw(false);
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.translate(this.mPosX, this.mPosY);

}

}

1 个答案:

答案 0 :(得分:1)

您可以在构造函数中使用setPadding(this.mPosX,this.mPosY,0,0)。它应该工作。