Android 应用没有进入onTouch方法

Android app does not get into onTouch method

我在使用 onTouch() 方法时遇到问题。我用来实现它的代码如下。

public class EjemploView extends View implements OnTouchListener  {
...
@Override
    public boolean onTouch(View v, MotionEvent event) {
            if(event.getActionMasked()==0) {
                slider2.setCenX(slider2.getCenX() - 1);
            }
        return false;
    }

}

关键是我在 onTouch 方法中设置了一个调试器停止,即使我触摸屏幕它也永远不会进入它。我究竟做错了什么?

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);
    setContentView(new EjemploView(this));

那是我实例化视图的地方

public class EjemploView extends View implements OnTouchListener  {

    private Drawable drawableFader, drawableSlider;
    private Grafico fader1, fader2, slider1, slider2;

    public EjemploView(Context context) {
        super(context);
        Resources res = context.getResources();
        drawableFader = res.getDrawable(R.drawable.fader);
        drawableSlider=res.getDrawable(R.drawable.slider);

        fader1 = new Grafico(this, drawableFader);
        fader2 = new Grafico(this, drawableFader);
        slider1 = new Grafico(this, drawableSlider);
        slider2 = new Grafico(this, drawableSlider);


        fader1.setAlto(350);
        fader1.setAncho(64);
        fader2.setAlto(350);
        fader2.setAncho(64);
        fader2.setAngulo(90);


        slider1.setAlto(90);
        slider1.setAncho(55);
        slider2.setAlto(90);
        slider2.setAncho(55);
        slider2.setAngulo(90);


    }

    @Override
    protected void onSizeChanged(int ancho, int alto, int ancho_anter, int alto_anter) {
        super.onSizeChanged(ancho, alto, ancho_anter, alto_anter);
        // Una vez que conocemos nuestro ancho y alto.

        fader1.setCenX(ancho / 4 - 31);
        fader1.setCenY(alto / 4 - 50);
        slider1.setCenX(ancho / 4 - 28);
        slider1.setCenY(alto / 4 - 50);
        fader2.setCenX(ancho - 271);
        fader2.setCenY(alto / 4 - 50);
        slider2.setCenX(ancho - 277);
        slider2.setCenY(alto / 4 - 50);
    }

    @Override
    synchronized protected void onDraw(Canvas canvas) {
        fader1.dibujaGrafico(canvas);
        fader2.dibujaGrafico(canvas);
        slider1.dibujaGrafico(canvas);
        slider2.dibujaGrafico(canvas);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
            Log.d("TAG", "I've reached this point");
            if(event.getActionMasked()==0) {
                slider2.setCenX(slider2.getCenX() - 2);
            }
        return false;
    }
}

这就是我的视图的全部代码。它显示它是因为我可以看到可绘制对象。

您正在实现一个新接口,但您应该使用已经定义的 onTouchEvent(MotionEvent event)。只需覆盖它。

class CustomImageView extends ImageView {

    ...

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getActionMasked();

        Log.d(TAG, String.valueOf(action));

        return false;
    }
}

添加为答案,只是为了让它更有意义。 您正在实施 onTouchListener 但您没有将其设置为您的 onTouchListener。因此,您在视图中留下了一个功能齐全的 onTouchListener,它永远不会被调用。

public EjemploView(Context context) {
        super(context);
        /** \/ Add this line right here \/ */
        setOnTouchListener(this);
        Resources res = context.getResources();
        drawableFader = res.getDrawable(R.drawable.fader);
        drawableSlider=res.getDrawable(R.drawable.slider);

        fader1 = new Grafico(this, drawableFader);
        fader2 = new Grafico(this, drawableFader);
        slider1 = new Grafico(this, drawableSlider);
        slider2 = new Grafico(this, drawableSlider);


        fader1.setAlto(350);
        fader1.setAncho(64);
        fader2.setAlto(350);
        fader2.setAncho(64);
        fader2.setAngulo(90);


        slider1.setAlto(90);
        slider1.setAncho(55);
        slider2.setAlto(90);
        slider2.setAncho(55);
        slider2.setAngulo(90);


    }