安卓 : click/touch event not working after canvas translate

标签 android canvas translate invalidation ondraw

我有一个包含多个 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/

相关文章:

javascript - 在 WebGL 中翻译 3d 对象

android - 自定义可见性转换器 - Android - 发布 (MvvmCross)

java - 共享内存(int)与java线程的同步

android - Android中1920*1080会用到哪个res文件夹?

selenium - Chrome 驱动程序 : How to translate a page using selenium?

python - 代码不从字典中删除所需的值

java - Android机器不在网络上

javascript - Canvas drawImage 在本地运行时抛出 INDEX_SIZE_ERR,而不是从网络运行

javascript - 如何将文本添加到 Canvas 中的弹性碰撞?

wpf - WPF Canvas 中的可见元素