ImageView: метод onDraw рисует «позади» фон изображения, а не вверху

Вот код простого расширения ImageView, который позволяет пользователю рисовать пальцем.

public class MyImageView extends ImageView { List<Point> points = new ArrayList<Point>(); Paint paint = new Paint(); public MyImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onDraw(Canvas canvas) { for (Point point : points) { canvas.drawCircle(point.x, point.y, 5, paint); // Log.d(TAG, "Painting: "+point); } super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); Point point = new Point(); point.x = event.getX(); point.y = event.getY(); points.add(point); invalidate(); Log.d("", "point: " + point); return true; } class Point { float x, y; @Override public String toString() { return x + ", " + y; } } } 

Это работает очень хорошо.

Теперь я хочу использовать этот код для рисования в верхней части растрового изображения.

Я использовал:

 MyImageView ivPic = (MyImageView) dialog.findViewById(R.id.ivPic); ivPic.setImageBitmap(picture); 

Но рисунок рисуется «позади» Bitmap:

Введите описание изображения здесь

Вы хоть представляете, как я могу рисовать «верх» битового массива?

Я изменил порядок в методе onDraw , я положил super.onDraw(canvas); В начале, и я думаю, что это работает сейчас

Переопределить и использовать метод dispatchDraw , я использовал его для рисования над представлениями

Я отвечаю на свой вопрос, просто нашел ответ:

 ivPic.setBackgroundDrawable(new BitmapDrawable(getResources(),picture)); 

Не знаю, является ли это лучшей практикой, но это работает для меня …