Mam niestandardowy układ do rysowania linii na podstawie danych dotykowych. Mam to rysowanie linii, ale kiedy użytkownik dotknie ekranu, linia rozmywa i rysuje nową linię. To, co chcę zrobić, to narysować nową linię i zostawić tam poprzednią linię. Oto mój kod:Android Canvas drawLine
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View {
Paint paint = new Paint();
float startX;
float startY;
float stopX;
float stopY;
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(6f);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawLine(startX, startY, stopX, stopY, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
stopX = event.getX();
stopY = event.getY();
break;
case MotionEvent.ACTION_UP:
stopX = event.getX();
stopY = event.getY();
break;
default:
return false;
}
Invalidate();
return true;
}
}
dzięki. Jeden problem polega na tym, że od czasu do czasu przerysowuje płótno. Jak zatrzymać się od przerysowywania płótna? –
Nie jestem pewien, czy rozumiem ... czy płótno nie powinno zostać przerysowane? Miałem mały błąd w moim kodzie ("ACTION_UP" to "ACTION_MOVE"), które naprawiłem w ciągu 5-minutowego okresu karencji. Może masz nieprawidłową wersję? – tom
dziękuję, że to jest wielki przykład –