Android - 检测onTouchListener问题

3

我有一个应用于我的Activity的自定义DrawableView。

我正在尝试实现对该视图的动作监听,以便可以检测不同位置的不同触摸事件。然而,我似乎甚至没有从Touch Down得到响应。

以下是我代码中相关的部分:

public class CustomDrawableView extends View implements OnTouchListener
{      
    public CustomDrawableView(Context context)
    {
        super(context);         
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        mDrawBackGround(canvas);
        mDrawHexPanel(canvas);
        mDrawHuePanel(canvas);
        mDrawGreyScaleHexPanel(canvas);
        mDrawHuePointer(canvas);
    }

    @Override
    public boolean onTouch(View CustomDrawableView, MotionEvent event) 
    {
        float touchX = event.getX();
        float touchY = event.getY();

        switch (event.getAction())
        {
            case MotionEvent.ACTION_DOWN:


                    pointerTouch=true;
                    cpRed=255;
                    cpGreen=108;
                    cpBlue=0;                           
                    invalidate();                       
                    break;
        }
        return true;
    }

那我做错什么了吗?

你注册了监听器吗? - Iulius Curt
3个回答

1
要获取多点触控事件,您应该使用getX(int pointer)和getY(int pointer)方法,它们返回每个触摸点的位置。
您可以使用getPointerCount()方法知道屏幕上有多少个手指。
(来自MotionEvent的方法)
此外,只有在第一次触摸手指时才会触发ACTION_DOWN事件,如果是拖动,则下一个事件将是ACTION_MOVE。
您正在覆盖onTouch(View arg0, MotionEvent arg1),但要监听从您创建的View接收到的触摸事件,您应该覆盖onTouchEvent(MotionEvent evt)。

Marcos是完全正确的,特别是最后一部分。请记住,如果您想对触摸事件的坐标进行操作,则变量touchX和touchY将返回事件的坐标。此外,当您从屏幕上放开手指时,会发生ACTION_UP事件。祝你好运! - Amplify91
看起来我实际上为自己过于复杂化了,非常感谢,现在我知道它正在工作,我可以从那里开始处理事情。 - Phil

0

0
CustomDrawableView 类的构造函数中添加监听器注册。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接