java - MotionEvents 未触发

标签 java android motionevent

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

这个想法是,当用户触摸屏幕时,它会获取 x1 和 y1 位置,并且每次 onTouch 时都会获取 x1 和 y1 位置。被触发时,它必须将矩形 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;
    }
});

谁能给我举个例子吗?

最佳答案

ACTION_UP 由上面的代码触发。尝试下面的代码,您将看到日志。

我认为您的问题可能与您获得的积分有关。我不知道你如何定义 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;
    }
});

关于java - MotionEvents 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15105175/

相关文章:

java - 根据Class Attribute创建HashSet

java - 如何使用java检索tomcat日志文件

java - 定义轮廓是否闭合

android - RecyclerView 与 GridLayoutManager 试图解决 wrap_content

java - 无法连接数据库

android - 在 TableLayout 中对齐 ImageButton

java - ImageView MotionEvent如果有两个指针,则停止ACTION_UP

ios - swift:motionEnded 不触发或真实设备

android - event.getAction() 从不使用 MotionEvent.ACTION_UP

Java, MyBatis 3.4, 大量的批量插入实际上并没有立即存储到数据库中