Рисовать растровое изображение несколько раз - PullRequest
1 голос
/ 02 июня 2019

Я пытаюсь рисовать растровое изображение несколько раз примерно так:

enter image description here

код ниже делает растровое изображение просто перемещающимся:

public class TheChainView extends View {
    Bitmap bitmap;
    float x = 200;
    float y = 200;

    public TheChainView(Context context, AttributeSet attrs) {
        super(context, attrs);
        bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.heart);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                x = event.getX();
                y = event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_MOVE:
                x = event.getX();
                y = event.getY();
                invalidate();
                break;
        }
        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(bitmap, x, y, null);
    }
}

как заставить рисовать растровое изображение несколько раз, когда я касаюсь экрана

1 Ответ

1 голос
/ 02 июня 2019

Это не может быть хорошим решением, но вы можете хранить координаты в некоторой структуре данных, как показано ниже:

   public class TheChainView extends View {
        Bitmap bitmap;
        List<Point> points = new ArrayList<>();

        public TheChainView(Context context, AttributeSet attrs) {
            super(context, attrs);
            bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.heart);
            points.add(new Point(200, 200));
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_MOVE:
                    points.add(new Point(event.getX(), event.getY()));
                    invalidate();
                    break;
            }
            return true;
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            for (Point p : points) {
                canvas.drawBitmap(bitmap, p.x, p.y, null);
            }
        }

        static class Point {
            float x, y;
            Point(float x, float y) {
                this.x = x;
                this.y = y;
            }
        }
    }
...