Android : click / touch event not working after ca

2019-07-29 06:13发布

问题:

I have a FrameLayout that contains several ImageView. On the main activity, I record the touch events in order to move my FrameLayout and the images inside with the finger (drag).

For doing so, I am calling canvas.translate(x,y) inside the onDraw of the framelayout which is called by a invalidate() in the activity touch event handler.

Everything works like a charm except that after the translate, I am not able to click on my ImageView. In fact, the click listener of each image is still at the original place before the translate.

I have read that I should manually update the layout of each image after the translate but how to do that ? If I change the margin with the translate value, the images are going two times further ...

I would really appreciate any help on that one.

Cheers.

Here is the frameLayout where I translate the canvas in the onDraw() method (the ImageView are added to that FrameLayout in my main Activity).

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:

You can use setPadding(this.mPosX,this.mPosY,0,0) in the the constructor. It should work.