2011-05-30 23 views
7

Me gustaría saber cómo dibujar una línea en ImageView mientras el usuario desliza su dedo?Cómo dibujar una línea en ImageView en Android?

¿Podría cualquier cuerpo explicar esto? O tal vez cualquier Enlace para comenzar con esto.

+0

¿desea dibujar cierta línea o hacer algo como pintar sobre ella? –

Respuesta

8

Debe tener su propio ImageView y anular la función onDraw. Usar algo como esto

public class MyImageView extends ImageView{ 

    public MyImageView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint p = new Paint(Paint.ANTI_ALIAS_FLAG); 
     canvas.drawLine(0, 0, 20, 20, p); 

    } 

} 

y en su clase principal crear el objeto MyImageView; y cuando toca su pantalla, llame a la función update();

+0

Hola george, ¿quisiste decir llamando al método de actualización en el evento onTouch()? Lo siento por preguntar mucho, soy nuevo en esto. – user776550

+0

Sí, lo digo en serio. No hay problema, puede preguntar cuánto desea)) – George

+0

Debe anular OnTouchListener y en su función OnTouch llamando al – George

0

Tome un vistazo a la muestra ApiDemos FingerPaint.

Al usar esto, puede dibujar una línea en ImageView tocando en la pantalla.

4

Este es un ejemplo completo de cómo se puede dibujar el rectángulo verde sobre otra imagen:

package CustomWidgets; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 

/** 
* Allows to draw rectangle on ImageView. 
* 
* @author Maciej Nux Jaros 
*/ 
public class DrawImageView extends ImageView { 
    private Paint currentPaint; 
    public boolean drawRect = false; 
    public float left; 
    public float top; 
    public float right; 
    public float bottom; 

    public DrawImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     currentPaint = new Paint(); 
     currentPaint.setDither(true); 
     currentPaint.setColor(0xFF00CC00); // alpha.r.g.b 
     currentPaint.setStyle(Paint.Style.STROKE); 
     currentPaint.setStrokeJoin(Paint.Join.ROUND); 
     currentPaint.setStrokeCap(Paint.Cap.ROUND); 
     currentPaint.setStrokeWidth(2); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if (drawRect) 
     { 
      canvas.drawRect(left, top, right, bottom, currentPaint); 
     } 
    } 
} 

Cuando haya esta definido que puede reemplazar ImageView con vistas anteriormente (Widget), por ejemplo:

<CustomWidgets.DrawImageView 
    android:id="@+id/widgetMap" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:src="@drawable/map_small" 
/> 

continuación, puede utilizar esta por ejemplo en caso de toque de la actividad que controla el diseño:

mapImageView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      DrawImageView drawView = (DrawImageView) v; 

      // set start coords 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       drawView.left = event.getX(); 
       drawView.top = event.getY(); 
      // set end coords 
      } else { 
       drawView.right = event.getX(); 
       drawView.bottom = event.getY(); 
      } 
      // draw 
      drawView.invalidate(); 
      drawView.drawRect = true; 

      return true; 
     } 
    }); 

Por supuesto, usted puede hacer algunos getters y setters y otras rutinas de sobre-ingeniería de Java ;-).

Cuestiones relacionadas