2012-06-24 13 views
5

Oto kod prostego rozszerzenia ImageView, który pozwala użytkownikowi rysować palcem.ImageView: Metoda onDraw rysuje "za" tłem obrazu, a nie na górze.

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

Ta praca całkiem dobrze.

Teraz chcę użyć tego kodu do rysowania u góry mapy bitowej.

użyłem:

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

Ale rysunek jest wyciągnąć „za” Bitmap:

enter image description here

masz jakiś pomysł jak mogę narysować na „górze” z Bitmapa?

+0

Czy udało Ci się uzyskać bitmapę za pomocą swoich rysunków i mapy bitowej? Robię to samo i nie mogę zapisać zapisanej bitmapy –

Odpowiedz

5

zmieniłem kolejność onDraw metody, kładę super.onDraw(canvas); na początku i myślę, że teraz działa

0

mi odpowiedzieć na moje własne pytanie, po prostu znaleźć odpowiedź:

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

nie wiem, czy to jest najlepsze praktyki, ale to działa na mnie ...

2

nadpisanie i używać dispatchDraw metodzie, ja używał go zwrócić w ciągu widokiem

+0

Mosh, czy nadal to pamiętasz? co umieszczasz w przesłoniętej metodzie dispatchDraw? – quinestor

+0

@quinestor co? –

+0

Mój przyjaciel uratował mój tydzień właśnie teraz. Wielkie dzięki. Użyłem tego na RecyclerView i działało idealnie. Od API> 23 jest to metoda naDrawForeground (Canvas canvas), która robi dokładnie to. Ale używam API> = 16. –