2012-06-24 20 views
5

Đây là mã của phần mở rộng đơn giản của ImageView cho phép người dùng vẽ bằng ngón tay.ImageView: phương pháp onDraw vẽ "đằng sau" nền hình ảnh, không phải ở đầu

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; 
     } 
    } 
} 

Công việc này khá tốt.

Bây giờ, tôi muốn sử dụng mã này để vẽ ở đầu bitmap.

tôi đã sử dụng:

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

Nhưng các bản vẽ được vẽ "đằng sau" Bitmap:

enter image description here

Bạn có bất cứ ý tưởng làm thế nào tôi có thể rút ra vào "top" của Bitmap?

+0

Bạn đã quản lý để có được một bitmap với bản vẽ của bạn và bitmap của bạn phía sau? tôi đang làm như vậy và không thể có được để tiết kiệm bitmap thay đổi –

Trả lời

5

tôi đã thay đổi trật tự trong onDraw phương pháp, tôi đặt super.onDraw(canvas); ngay từ đầu và tôi nghĩ rằng nó hoạt động tại

0

tôi trả lời câu hỏi của riêng tôi, chỉ cần tìm thấy câu trả lời:

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

Không biết nếu đó là thực hành tốt nhất nhưng mà làm việc cho tôi ...

2

ghi đè và sử dụng dispatchDraw Method, i sử dụng nó để vẽ lên trên quan điểm

+0

Mosh làm bạn vẫn còn nhớ điều này? những gì bạn đặt trong phương pháp dispatchDraw overriden? – quinestor

+0

@quinestor cái gì? –

+0

Bạn tôi đã lưu tuần của tôi ngay bây giờ. Cảm ơn rất nhiều. Tôi đã sử dụng nó trên RecyclerView và nó hoạt động hoàn hảo. Từ API> 23 là phương thức onDrawForeground (Canvas canvas) thực hiện chính xác điều đó. Nhưng tôi đang hỗ trợ API> = 16. –

Các vấn đề liên quan