我有一个包含多个 ImageView 的 FrameLayout。在主要 Activity 中,我记录了触摸事件,以便用手指(拖动)移动我的 FrameLayout 和里面的图像。
为此,我在框架布局的 onDraw 内调用 canvas.translate(x,y),它由 Activity 触摸事件处理程序中的 invalidate() 调用。
除了在翻译之后,我无法点击我的 ImageView 之外,一切都很顺利。事实上,每张图片的点击监听器仍然在翻译前的原始位置。
我读到我应该在翻译后手动更新每个图像的布局,但该怎么做?如果我用翻译值更改边距,图像将向前移动两倍......
如果您对此有任何帮助,我将不胜感激。
干杯。
这是我在 onDraw() 方法中转换 Canvas 的 frameLayout(在我的主 Activity 中将 ImageView 添加到该 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);
}
}
最佳答案
您可以在构造函数中使用 setPadding(this.mPosX,this.mPosY,0,0)。它应该有效。
关于安卓 : click/touch event not working after canvas translate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6851322/