Android: использование onDoubleTap для рисования круга

Я создал общедоступный класс, расширяющий ImageView, который называется ZoomInZoomOut. В этом представлении, опуская один палец, пользователь может перетаскивать изображение. Сведение и разведение двух пальцев позволяет пользователю увеличивать или уменьшать масштаб. Все это работает нормально.

Теперь я хочу дважды нажать, чтобы нарисовать круг в точных координатах x и y, к которым прикасается пользователь. По какой-то причине приведенный ниже код не рисует круг... ничего не происходит.

class MyGestureDetector extends SimpleOnGestureListener {



    @Override
    public boolean onDoubleTap(MotionEvent event) {


        Bitmap bmOverlay = Bitmap.createBitmap(containerWidth,
               containerHeight,
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmOverlay);
        Paint p = new Paint();
        p.setAntiAlias(true);
        p.setColor(Color.RED);
        p.setStrokeWidth(2);
        p.setStyle(Paint.Style.STROKE);
        canvas.drawBitmap(bmOverlay, matrix, null);
        canvas.drawCircle(event.getX(),event.getY(),
                100, p);

        return true;
    }



    @Override
    public boolean onDown(MotionEvent e) {
        return false;
    }
}

person nnnnnnitters    schedule 19.03.2015    source источник


Ответы (1)


Вы ничего не делаете с растровым изображением после рисования на нем. Вы также пытаетесь нарисовать растровое изображение на холсте, созданном из растрового изображения.

Вы должны переопределить onDraw и нарисовать там свое растровое изображение, используя onDoubleTap для обновления растрового изображения по мере необходимости.

person Austin Hanson    schedule 19.03.2015
comment
Где я должен переопределить onDraw? В действии, которое отображает imageView? - person nnnnnnitters; 19.03.2015
comment
Вы захотите создать собственный вид, чтобы напрямую обрабатывать рисунок в виде, а не пытаться рисовать и перемещать растровое изображение. Ознакомьтесь с developer.android.com/training/custom-views/custom- рисунок.html - person Austin Hanson; 19.03.2015
comment
На самом деле этот класс MyGestureDetector находится внутри класса, который расширяет ImageView. Так должен ли я сделать еще один пользовательский вид для обработки чертежа? - person nnnnnnitters; 19.03.2015
comment
Тогда вы можете просто использовать onDraw ImageView. - person Austin Hanson; 19.03.2015