每次触摸屏幕时画一个圆圈

Draw a circle each time I touch the screen

我的objective是每次触摸屏幕都画一个圆圈,再触摸一次,之前的圆圈就消失了。

现在发生的事情是以前的圆圈没有消失,所以每次我触摸屏幕时它们都会加起来。 enter image description here

这是我的代码:

科特林:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)       

    var imageBody: ImageView = findViewById(R.id.imageViewBody)       

    imageBody.isDrawingCacheEnabled = true
    imageBody.buildDrawingCache(true)

    imageBody.setOnTouchListener(OnTouchListener { v, event ->

        if(event != null){
            if (event.action == MotionEvent.ACTION_DOWN) {
                val bitmap: Bitmap = imageBody.drawingCache
                val pixel: Int = bitmap.getPixel(event.getX().toInt(), event.getY().toInt())
                coordX = event.getX()
                coordY = event.getY()

                val Drawable = imageBody.drawable
                val ImageBounds = Drawable.bounds
                val scaledHeight = ImageBounds.height()
                val scaledWidth = ImageBounds.width()

                OrigX = coordX / scaledHeight
                OrigY = coordY / scaledWidth

                when (pixel) {
                    Color.rgb(241,241,241) -> {
                        val canvas = Canvas(bitmap)
                        val paint = Paint()
                        paint.color = Color.rgb(255,128,0)

                        canvas.drawCircle(coordX, coordY, 15F, paint) /**DRAW CIRCLE*/

                        imageBody.setImageBitmap(bitmap)
                        imageBody.Invalidate()
                    }
                }
            }
        }

        false
    })

}
public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SfView(this));
    }

    class SfView extends SurfaceView {

        private final SurfaceHolder surfaceHolder;
        private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

        public DrawingView(Context context) {
            super(context);
            surfaceHolder = getHolder();
            paint.setColor(Color.RED);
            paint.setStyle(Style.FILL);
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                if (surfaceHolder.getSurface().isValid()) {
                    Canvas canvas = surfaceHolder.lockCanvas();
                    canvas.drawColor(Color.BLACK);
                    canvas.drawCircle(event.getX(), event.getY(), 50, paint);
                    surfaceHolder.unlockCanvasAndPost(canvas);
                }
            }
            return false;
        }
    }
}

试试这个。清除操作中 imageView 的位图 ACTION_UP。这是示例代码:

首先在 onTouchListener 之外制作位图,例如:

private var bitmap: Bitmap? = null

那么你的 onTouchListener 将是这样的:

imageBody.setOnTouchListener({ v, event ->

        if(event != null){
            if (event.action == MotionEvent.ACTION_DOWN) {
                bitmap = Bitmap.createBitmap(imageBody.drawingCache)
                val pixel: Int = bitmap.getPixel(event.getX().toInt(), event.getY().toInt())
                coordX = event.getX()
                coordY = event.getY()

                val Drawable = imageBody.drawable
                val ImageBounds = Drawable.bounds
                val scaledHeight = ImageBounds.height()
                val scaledWidth = ImageBounds.width()

                OrigX = coordX / scaledHeight
                OrigY = coordY / scaledWidth

                when (pixel) {
                    Color.rgb(241,241,241) -> {
                        val canvas = Canvas(bitmap)
                        val paint = Paint()
                        paint.color = Color.rgb(255,128,0)

                        canvas.drawCircle(coordX, coordY, 15F, paint) /**DRAW CIRCLE*/

                        imageBody.setImageBitmap(bitmap)
                        imageBody.Invalidate()
                    }
                }
            }

            if (event.action == MotionEvent.ACTION_UP) {
                if (bitmap != null && !bitmap!!.isRecycled) {
                    bitmap?.recycle()
                    bitmap = null
                }
            }
        }
        true
    })