Ich erstelle eine grundlegende Zeichenanwendung. Die folgenden Funktionen werden zum Zeichnen der Linie verwendet.Android Leinwand Zeichnung Linie
public void touchEventLine(MotionEvent event){
Log.e("Canvas","Line Specific Event");
float x = event.getX();
float y = event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
Log.e("Canvas","Line Specific Event: Action Down");
startX=x;
startY=y;
mPath.moveTo(startX,startY);
Log.e("Canvas","Line Specific Event: Moved to X:"+startX+" Y:"+startY);
mX=x;
mY=y;
invalidate();
break;
case MotionEvent.ACTION_MOVE:
Log.e("Canvas","Line Specific Event: Action Move");
endX=x;
endY=y;
drawLine(endX,endY);
Log.e("Canvas","Line Specific Event: Drawing From X:"+startX+" Y:"+startY+" to X:"+endX+" Y:"+endY);
paths.add(mPath);
colorsMap.put(mPath,selectedColor);
mPath = new Path();
isDrawing++;
invalidate();
if(isDrawing>1) {
paths.remove(paths.size() - 2);
isDrawing--;
}
break;
case MotionEvent.ACTION_UP:
Log.e("Canvas","Line Specific Event: Action Up");
endX=x;
endY=y;
drawLine(endX,endY);
paths.add(mPath);
colorsMap.put(mPath,selectedColor);
mPath = new Path();
paths.remove(paths.size() - 2);
invalidate();
isDrawing=0;
break;
}
}
und die drawLine() Funktion ist
private void drawLine(float x2,float y2){
mPath.lineTo(x2,y2);
invalidate();
Log.e("Canvas","Line Drawn");
}
und meine OnDraw() Funktion ist
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mBitmap, 0, 0, canvasPaint);
canvas.drawPath(mPath,drawPaint);
for (Path p : paths) {
int curColor= colorsMap.get(p);
drawPaint.setColor(curColor);
canvas.drawPath(p, drawPaint);
}
Log.e("Canvas","OnDraw() Called");
}
Mein Problem ist, dass die Linie von links oben zieht Ecke des Bildschirms. Ich glaube es ist (0,0). Ich habe die gleiche Logik zum Zeichnen von Kreis und Rechteck verwendet, und beide funktionieren gut. Gibt es einen Fehler in meiner Logik? Wie kann ich das beheben ..? Vielen Dank im Voraus
Haben Sie "canvas.drawLine" ausprobiert? –
oben links auf der Leinwand ist (0,0) wie Sie erraten, aber was ist das Problem? – lelloman
Nein .. weil ich eine Rückgängig-Funktion implementiert habe, die nur funktioniert, wenn ich Pfad verwende. –