Ändern Sie Farbe, an Farbe und Leinwand auf Android
Sorry, wenn die Frage ist dumm, aber ich bin neu auf Android. Ich lese viel über die Entwickler.android.com -, sondern Lösungen für mein problem nicht gefunden, leider.
Die meisten der code, den ich gefunden auf stackoverflow, fertig ist das Teil.
Diese Ansicht eingefügt in die Tätigkeit im FrameLayout, über den text, und ermöglicht es Ihnen, mit Anmerkungen in das e-book.
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class PaintSurface extends View implements OnTouchListener {
private Canvas canvas;
private Path path;
private Paint paint;
private ArrayList<Path> paths = new ArrayList<Path>();
public PaintSurface(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.MITER);
paint.setStrokeCap(Paint.Cap.SQUARE);
paint.setColor(Color.RED);
paint.setStrokeWidth(16);
paint.setAlpha(100);
canvas = new Canvas();
path = new Path();
paths.add(path);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
for (Path p : paths) {
canvas.drawPath(p, paint);
}
}
private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;
private void touch_start(float x, float y) {
path.reset();
path.moveTo(x, y);
mX = x;
mY = y;
}
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
mX = x;
mY = y;
}
}
private void touch_up() {
path.lineTo(mX, mY);
canvas.drawPath(path, paint);
path = new Path();
paths.add(path);
}
@Override
public boolean onTouch(View arg0, MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();
break;
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
break;
}
return true;
}
public void setColor(int color) {
paint.setColor(color);
}
}
Beschreiben Sie das problem.
Ich ziehe die Linie von der Standard-Farbe, rot. Verwenden Sie dann die setColor() wechselt zu grün, um zu zeichnen eine grüne Linie in der Nähe der roten Linie. Aber die erste rote Zeile, die auch grün wird. Solche Veränderungen auftreten, wenn Sie den Stil zu ändern oder die Breite der Striche.
Wie ist es möglich, malen Sie eine andere Farbe?
Gefühl, dass in ein paar Monaten das problem scheint mir lächerlich und dumm, und ich fühle mich albern und ich würde mich schämen, aber jetzt weiß ich nicht, wie dieses problem zu lösen...
InformationsquelleAutor Alex Sh | 2012-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Paint
Farbe ist nur wirksam, wenn Sie zeichnen.Aus dem code, das Sie zeichnen, alle Wege auf einmal.
Dieser nimmt die gleiche Farbe-Objekt und verwendet es zum zeichnen der Pfade, mit was auch immer Farbe gesetzt wurde letzten.
Was Sie tun müssen, ist, legen Sie die Farbe zwischen der Zeichnung.
Eine bessere Lösung wäre
InformationsquelleAutor Doomsknight
Eine Sache, die Sie versuchen können, ist die Erstellung einer
Paint
Objekt für jeden Pfad in array-Liste.. Diese Weise können Sie verschiedenePaint
Eigenschaften für jeden Pfad in der ArrayList...Paint
Objekte ist ziemlich teuer. Haben Sie gesehen, alle performance-Verbesserungen mit einem array wie diesem?InformationsquelleAutor Praful Bhatnagar
ersetzen Sie Ihre onTouchEvent-und onDraw-Methode, oder Sie können diese benutzerdefinierte Ansicht
InformationsquelleAutor vino
Versuchen, diesen code wird es helfen, zu ändern, Leinwand, hintergrund-Farbe und Farbe.Ich bin mit dieser in meinem app.
Sie können es nennen, irgendeine Methode von der Tätigkeit dies zu tun.
Fügen Sie diese in der oncreate-Methode.
//Onclick listener und verwenden Sie folgende codes
InformationsquelleAutor SANJAY GUPTA
Ich hatte das gleiche problem, ich habe zwei Methoden in meinem DrawingView-Klasse, um die Farbe zu ändern, wenn eine andere Farbe ausgewählt wird, auf einer Farbpalette. Und eine andere, ändert sich die Farbe nach dem Zufallsprinzip alle paar Sekunden mit einem handler.
Musste ich invalidate() in beiden Methoden auf eine Art refresh, was betroffen war, auf dem Haupt-thread und nicht ändern, was vorher gezeichnet. Funktioniert großartig, wenn Sie nur entkräften, in Ihre Methoden.
InformationsquelleAutor fadysi92
Beschreiben Sie den richtigen Weg aber beim ersten mal wählen Sie die Farbe, dann ist es richtig funktioniert aber wieder ändern, dann dasselbe problem aufgetreten ist .
InformationsquelleAutor Android Help