2015-03-03 3 views
0

Я недавно начал использовать ImageViewZoom (https://github.com/sephiroth74/ImageViewZoom) и что я собираюсь сделать, это нарисовать некоторые строки на растровом изображении, используемом в этом представлении время от времени.Как нарисовать линии на растровом изображении, используемом в ImageViewZoom?

Я попытался сделать это следующим образом, но в результате вид больше не может масштабироваться.

protected void onDraw(Canvas canvas) 
{ 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 

    Canvas bmp_canvas = new Canvas(bmp);//bmp is the original bitmap 

    Paint paint = new Paint(); 

    //Draw map 
    paint. setColor(Color.BLUE); 
    paint. setStrokeWidth(10); 
    int i; 
    for(i=0; i<toDraw.size();i++) 
    { 
     Segment now = toDraw.get(i); //toDraw is a List and stores the lines 

     PointType tmp_start = now.s; 
     PointType tmp_end = now.e; 

     bmp_canvas.drawLine((float)tmp_start.x, (float)tmp_start.y, 
       (float)tmp_end.x, (float)tmp_end.y, paint); 
    } 

    Matrix matrix = getImageViewMatrix(); 
    setImageBitmap(bmp, matrix, ZOOM_INVALID, ZOOM_INVALID);   
    return; 
} 

Так что это правильный способ сделать это? Большое спасибо!

ответ

0

Ну, я решил это сам!

Я сделал это следующим образом:

public void drawMap(Bitmap bmp) //a new function outside of onDraw() 
{ 
    Bitmap now_bmp = Bitmap.createBitmap(bmp); 
    Canvas canvas = new Canvas(now_bmp); 
    Paint paint = new Paint(); 

    //Draw map 
    paint. setColor(Color.BLUE); 
    paint. setStrokeWidth(10); 
    int i; 
    for(i=0; i<toDraw.size();i++) 
    { 
     Segment now = toDraw.get(i); 

     PointType tmp_start = now.s; 
     PointType tmp_end = now.e; 

     canvas.drawLine((float)tmp_start.x, (float)tmp_start.y, 
       (float)tmp_end.x, (float)tmp_end.y, paint); 
    } 

    Matrix matrix = getDisplayMatrix(); 
    setImageBitmap(now_bmp, matrix, ZOOM_INVALID, ZOOM_INVALID);  
} 

Короче говоря, просто создать холст с началом Bitmap, затем сделать что-то на него, то результат будет сохранен в битовой карте, и получить ток матрицу, и установите новое растровое изображение в ImageViewZoom, вот и все.

Смежные вопросы