有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java事件未触发

我试图在canvas上画一个正方形,但只有MotionEvent.ACTION_DOWN运行,然后listener停止

这个想法是,当用户触摸屏幕时,它会得到x1和y1位置,每次触发onTouch时,它必须将矩形frim x1 y1绘制到当前位置,最后在用户放开屏幕后将最后一个位置保存在x2 y2中

我的代码如下所示:

surfaceView.setOnTouchListener(new View.OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        holder = surfaceView.getHolder();
        canvas = holder.lockCanvas();
        if(event.getAction() == MotionEvent.ACTION_DOWN)
        {
            x1=event.getX();
            y1=event.getY();
        }
        else if(event.getAction() == MotionEvent.ACTION_UP)
        {
            x2=event.getX();
            y2=event.getY();
        }
        canvas.drawRect(x1, y1, event.getX(), event.getY(), paint);
        holder.unlockCanvasAndPost(canvas);
        return true;
    }
});

谁能给我举个例子吗


共 (1) 个答案

  1. # 1 楼答案

    从上述代码中触发操作。尝试下面的代码,你会看到日志

    我认为你的问题可能与你得到的分数有关。我不知道你是如何定义x1、y1、x2、y2的,但当声明超出范围时,它们必须是最终的。试试这个

    final SurfaceView s = (SurfaceView) findViewById(R.id.surface);
    
    final RectF rect = new RectF();
    
    s.setOnTouchListener(new OnTouchListener() {
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            SurfaceHolder holder = s.getHolder();
            Canvas canvas = holder.lockCanvas();
    
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                Log.d("action", "down");
                rect.left = event.getX();
                rect.top = event.getY();
            }
            if(event.getAction() == MotionEvent.ACTION_UP){
                Log.d("action", "up");
                rect.right = event.getX();
                rect.bottom = event.getY();
    
                Paint paint = new Paint();
                paint.setColor(Color.RED);
                canvas.drawRect(rect, paint);
            }
    
            holder.unlockCanvasAndPost(canvas);
            return true;
        }
    });