OnTouchEvent在SurfaceView画布内的视图上不起作用

我有一个Surfaceview,可以绘制操纵杆视图。该视图是具有ontouchevent的自定义视图,并且未调用ontouch事件。为什么?这是代码...

表面视图:

public class GameView extends SurfaceView implements Runnable {
    public void draw() {
      if (ourHolder.getSurface().isValid()) {            
        canvas = ourHolder.lockCanvas();
        //some code
        joystickOnScreen.layout(10,(int)(sh*0.8f),(int)(sh*0.2f),(int)(sh*1f));
        canvas.save();
        joystickOnScreen.draw(canvas);
        canvas.restore();
        //some code
        ourHolder.unlockCanvasAndPost(canvas);
      }
    }
}

操纵杆视图:

public class Joystick extends View {
    public Joystick(Context context) {
        super(context);
        setfocusable(true);
        setClickable(true);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getaction();
        //some code
    }
}
wangruiyue 回答:OnTouchEvent在SurfaceView画布内的视图上不起作用

SurfaceView不是ViewGroups,因此,它的行为不像普通的LinearLayout / RelativeLayout那样,将事件广播给孩子。相反,您可以手动覆盖onDraw来绘制它,或者从某个外部循环中调用draw方法,对吗?仅仅通过共享的代码就无法推断出如何渲染表面视图,但是似乎您是从某种控制器活动/片段中调用了draw()方法的?

您需要在SurfaceView内部执行的操作是执行ViewGroup通常为您执行的操作:查找所有子元素-按孩子,我是指您在SurfaceView区域内渲染的视图-并调用他们的onTouchEvent。在您的情况下,似乎只需要调用Joystick touchEvent。

这是一些示例代码:

public class GameView extends SurfaceView {

    //initialization and drawing stuff

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return joystickOnScreen.onTouchEvent(ev);
    }
}
本文链接:https://www.f2er.com/3151261.html

大家都在问