Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在用户触摸屏幕的地方画一个圆圈_Java_Android_Graphics - Fatal编程技术网

Java 在用户触摸屏幕的地方画一个圆圈

Java 在用户触摸屏幕的地方画一个圆圈,java,android,graphics,Java,Android,Graphics,我在用户触摸图像视图的地方画了一个圆圈。它可以很好地绘制圆,但用户触摸不到圆。它总是偏左很多。代码如下: 接触: image.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View arg0, MotionEvent arg1) { System.out.println("Touch recieved at "+arg1.getX() + " " + arg1.getY());

我在用户触摸图像视图的地方画了一个圆圈。它可以很好地绘制圆,但用户触摸不到圆。它总是偏左很多。代码如下:

接触:

image.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View arg0, MotionEvent arg1) {
        System.out.println("Touch recieved at "+arg1.getX() + " " + arg1.getY());
        touchX =  (arg1.getX());
        touchY =   (arg1.getY());
        System.out.println("Touch recieved at "+touchX + " " + touchY);
        image.setImageBitmap(createImage());

        return true;
    }
});
并在图像上绘制:

public Bitmap createImage(){
        Bitmap image = bmp.copy(Bitmap.Config.RGB_565, true);
        Canvas canvas = new Canvas(image);
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.GREEN);
        canvas.drawCircle(touchX, touchY, radius, paint);
        System.out.println("Drew a circle at "+touchX+" " + touchY+" with a radius of "+radius+".");
        return image;
    }
有什么想法吗?

试着画一画

touchX=touchX- image.getWidth() / 2;
touchY=touchY- image.getHeight() / 2;

这将绘制图像的中心,即您触摸的位置

您必须将触摸监听器添加到布局中,而不是图像中。将setOnTouchListener添加到布局中。无需触摸图像。

看一看示例

嗯,使其更接近。。。但仍然关闭??这就像你在屏幕上移动的越远,它离你越远。你移除图像的触控监听器了吗?您的布局宽度和高度是否为填充父级?在onTouch方法中,添加操作向下条件。if(arg1.getAction()==ActionEvent.ACTION\u向下)。如果您想拖动,请使用ACTION\u move。我用另一种方法解决了这个问题。谢谢