制作帆布'画线可点击

时间:2014-12-28 22:58:49

标签: java android canvas ontouchevent

根据这个答案,我创建了一个rectF的数组列表。

Technique to make a canvas drawLine() clickable?

这是我的代码的逻辑:

List<RectF> rectFs;

Point pt1;
Point pt2;

然后

path.moveTo(pt1.x, pt1.y);
path.lineTo(pt2.x, pt2.y);

path.computeBounds(rectF, true);
rectFs.add(rectF);

然后,我有这个方法来检查clicked和rectF arrayList。

void lineHighighted(Point pt) {
    int ct = 0;
    for(RectF rectF : rectFs) {
        if(rectF.contains(pt.x, pt.y)) {
            ct++;
            Log.d(tag, ct + "HERE");
        }
    }
}

我的问题是,有时候,整个arraylist被选中或“调用”,即使我没有触及那条“线”。

我的代码有什么不对吗?

提前致谢。

其他:

我在画布中添加此代码后发现:

path.moveTo(coor1[0], coor1[1]);
path.lineTo(coor2[0], coor2[1]);
canvas.drawPath(path, paint2);
path.computeBounds(rectf, true);

我之前的结果: before adding the code

它变成这样: enter image description here

1 个答案:

答案 0 :(得分:0)

它可能是!因为我没有看到你与画布互动的代码发布完全正常工作的代码。逻辑是一行不能覆盖另一行以防正常函数.hope我可以帮到你。

    // setting where I will draw the ImageView for taking pictures

    // rec is used for onInterceptTouchEvent. I pass this from the
    // highest to lowest layer so that when this area of the screen
    // is pressed, it ignores the TouchView events and passes it to
    // this activity so that the button can be pressed.
    rec.set((int)((double)mScreenWidth*.85),
            (int)((double)mScreenHeight*.10) ,
            (int)((double)mScreenWidth*.85)+mButtonDrawable.getMinimumWidth(), 
            (int)((double)mScreenHeight*.70)+mButtonDrawable.getMinimumHeight());
    mButtonDrawable = null;

通过这种逻辑,你可以在这个逻辑中使用你想要的任何东西,让它点击发生而不是重叠