Je voudrais savoir comment dessiner une ligne sur ImageView lorsque l'utilisateur fait glisser son doigt?Comment dessiner une ligne dans ImageView sur Android?
Quelqu'un peut-il expliquer cela? Ou peut-être un lien pour commencer à ce sujet.
Je voudrais savoir comment dessiner une ligne sur ImageView lorsque l'utilisateur fait glisser son doigt?Comment dessiner une ligne dans ImageView sur Android?
Quelqu'un peut-il expliquer cela? Ou peut-être un lien pour commencer à ce sujet.
Vous devez disposer de votre propre fonction ImageView et surcharger onDraw. Utilisez quelque chose comme ça
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);
}
}
et dans votre classe principale créer un objet MyImageView
; et lorsque vous touchez votre écran, appelez la fonction update();
Salut George, vouliez-vous dire en appelant la méthode de mise à jour sur l'événement onTouch()? Je suis désolé de demander beaucoup, je suis nouveau dans ce domaine. – user776550
Oui, je le pense. Pas de problème, vous pouvez demander combien vous voulez)) – George
Vous devez remplacer OnTouchListener et dans votre fonction OnTouch appelant l'invalider – George
Pour dessiner la ligne que l'utilisateur a dessinée, vous devez remplacer le dispatchTouchEvent. De cet événement, vous pouvez obtenir les coordonnées de la ligne et les dessiner dans l'onDraw comme indiqué par george.
Jetez un oeil à l'échantillon de ApiDemos FingerPaint. En utilisant ceci, vous pouvez tracer une ligne sur ImageView en touchant sur l'écran.
Ceci est un exemple complet de la façon dont vous pouvez dessiner un rectangle vert sur une autre image:
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);
}
}
}
Lorsque vous avez cette définition, vous pouvez remplacer ImageView par-dessus View (Widget) par exemple:
<CustomWidgets.DrawImageView
android:id="@+id/widgetMap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/map_small"
/>
Ensuite, vous pouvez utiliser par exemple en cas de contact de l'activité qui contrôle la mise en page:
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;
}
});
Bien sûr, vous pourriez faire quelques getters et setters et d'autres routines de sur-ingénierie Java ;-).
vous voulez dessiner une ligne ou faire de la peinture? –