Cómo dibujar una línea en ImageView en Android?
Me gustaría saber cómo dibujar una línea en ImageView como usuario deslizar su dedo?
¿Podría alguien explicar esto? O tal vez cualquier Enlace para empezar en esto.
- Redimensionar la imagen a todo el ancho y la altura fija con Picasso
- Obtener imágenes de la tarjeta SD - android
- Enderezamiento de la imagen en Android
- ¿Cómo puedo añadir una imagen en EditText
- Problemas al importar un recurso de imagen
- Problema de memoria de mapa de bits de Android - Error: falta de memoria en una asignación de 8294416 bytes
- Recuperar imagen de la biblioteca de fotos de google después de descargar
- Visualización de imagen de mapa de bits en Android (OpenCV)
- ImageView - Zoom en estiramiento o despliegue hacia abajo
- Android Imagebutton Cambiar imagen OnClick
- Android imageView: configuración de los parámetros de arrastrar y comprimir el zoom
- Android FileNotFound Exception - No se puede getInputStream desde la URL de la imagen que no tiene formato de archivo
- Widget de página de Viewpager más ancho de pantalla en Android
Debe tener su propia función ImageView y anular onDraw. Usa 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 objeto MyImageView
; Y cuando tocas tu pantalla, llama a update();
función
Este es un ejemplo completo de cómo puede dibujar 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.rgb 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 definido esto, puede reemplazar ImageView con Vista anterior (widget) por ejemplo:
<CustomWidgets.DrawImageView android:id="@+id/widgetMap" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/map_small" />
A continuación, puede utilizar esto, por ejemplo, en caso de contacto 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 que podría hacer algunos getters y setters y otras rutinas de ingeniería de Java ;-).
Para dibujar la línea que el usuario realmente dibujó tiene que anular el dispatchTouchEvent. A partir de ese evento puede obtener las coordenadas de la línea y dibujar en el onDraw como se muestra por george.
Echa un vistazo a la muestra FingerPaint de ApiDemos.
Al usar esto, puede dibujar líneas en ImageView tocando la pantalla.
- UnsatisfiedLInkError Vinculación a FFMPEG con NDK
- Android.widget.RelativeLayout $ LayoutParams no se puede convertir en android.widget.AbsListView $ LayoutParams