【问题标题】:How to determined if the user touch my bitmap?如何确定用户是否触摸了我的位图?
【发布时间】:2016-02-09 10:27:31
【问题描述】:

如何判断用户是否点击了我的 ImageView 的某些区域?

我在设置 (x,y) 坐标边界以检测何时单击特定位图时遇到了一些困难。

例如,如果位图的位置是 (75,75),比如说。即左上角在这个点,那么如果用户在(X,Y)点触摸屏幕,那么简单的条件:

我在画布上绘制了 4 个图像位置,分别是 (75,75)、(645,75)、(1215,75) 和 (75,490)。

它无法确定我点击了什么,它总是给我消息,“mImaget”而不是其他消息。

@Override
public boolean onTouch(View v, MotionEvent event) {
    int x = (int) event.getX();
    int y = (int) event.getY();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

             if (x >= 75 && x < (75 + mImaget.getWidth())
                    && y >= 75 && y < (75 + mImaget.getHeight())) {
                Toast.makeText(getActivity(), "mImaget", Toast.LENGTH_SHORT).show();
                Log.e("TOUCHED", "X: " + x + " Y: " + y + mImaget.getWidth() + "-" + mImaget.getHeight());
            }

            if (x >= 645 && x < (645 + mImageth.getWidth())
                    && y >= 75 && y < (75 + mImageth.getHeight())) {
                Toast.makeText(getActivity(), "mImageth", Toast.LENGTH_SHORT).show();
                Log.e("TOUCHED", "X: " + x + " Y: " + y + mImageth.getWidth() + "-" + mImageth.getHeight());
            }

            if (x >= 1215 && x < (1215 + mImagef.getWidth())
                    && y >= 75 && y < (75 + mImagef.getHeight())) {
                Toast.makeText(getActivity(), "mImagef", Toast.LENGTH_SHORT).show();
                Log.e("TOUCHED", "X: " + x + " Y: " + y + mImagef.getWidth() + "-" + mImagef.getHeight());
            }

            if (x >= 75 && x < (75 + mImageo.getWidth())
                    && y >= 490 && y < (490 + mImageo.getHeight())) {
                Toast.makeText(getActivity(), "mImageo", Toast.LENGTH_SHORT).show();
                Log.e("TOUCHED", "X: " + x + " Y: " + y + mImageo.getWidth() + "-" + mImageo.getHeight());
            }

            return true;
    }
    return false;
}

谢谢你:)

【问题讨论】:

  • 您是在画布上绘制位图还是在布局中设置?
  • 是的,我把它画在画布上,然后像这样放在 imageview 中:imageview.setImageBitmap(mBackground);
  • 你能在 imageview 对象上设置 setOnClick 或 setOnTouchListener() 吗?
  • 是的,我做到了,但我的 x 和 y 的条件有问题我只是想确定我是否触摸了 4 位置的某些区域 :) 你能看一下我的问题吗谢谢。
  • I have 4 image position that i draw in canvas,你的绘图代码是多少(onDraw)?

标签: java android canvas bitmap ontouchlistener


【解决方案1】:
@Override
public boolean onTouch(View v, MotionEvent event) {
    int x = (int) event.getX();
    int y = (int) event.getY();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

            if (x >= 75 && x < (75 + mBack.getWidth())
                    && y >= 75 && y < (75 + mBack.getHeight())) {
                Toast.makeText(getActivity(), "Zone1: " + x +"-" + y, Toast.LENGTH_SHORT).show();
            }

            if (x >= 645 && x < (645 + mBack.getWidth())
                    && y >= 75 && y < (75 + mBack.getHeight())) {
                Toast.makeText(getActivity(), "Zone2: " + x +"-" + y, Toast.LENGTH_SHORT).show();
            }

            if (x >= 1215 && x < (1215 + mBack.getWidth())
                    && y >= 75 && y < (75 + mBack.getHeight())) {
                Toast.makeText(getActivity(), "Zone3: " + x +"-" + y, Toast.LENGTH_SHORT).show();
            }

            if (x >= 75 && x < (75 + mBack.getWidth())
                    && y >= 490 && y < (490 + mBack.getHeight())) {
                Toast.makeText(getActivity(), "Zone4: " + x +"-" + y, Toast.LENGTH_SHORT).show();
            }

            Log.d("TOUCHED", "X: " + x + " Y: " + y + mImaget.getWidth() + "-" + mImaget.getHeight());


            return true;
    }
    return false;
}

您能否尝试使用这一部分代码而不是您的示例。

【讨论】:

  • 嗨,很抱歉,您能帮我编辑一下吗?这不是 mBack。
  • 同样不工作,条件总是转到 Zone1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多