Android View zur Laufzeit hinzufügen

  • Themenstarter Themenstarter einmal
  • Beginndatum Beginndatum
E

einmal

Gast
Moin!
Möchte per Button zur Laufzeit Kreise malen lassen. Das Problem ist, dass immer nur der zuletzt gezeichnete Kreis zu sehen ist, die zuvor gezeichneten verschwinden beim Benutzen des Button.

Java:
 public class MainActivity extends Activity {
    	    TextView tv;
    	    EditText et;
    	    LinearLayout ll;
    
    	   public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);

                     ll = new LinearLayout(this);
    	        ll.setOrientation(android.widget.LinearLayout.VERTICAL);
    	        ll.setLayoutParams(new ViewGroup.LayoutParams(-1,-1));
    	        ll.setBackgroundColor(0x88ff0000);
  
    	        Button btn = new Button(this);
    	        btn.setText("Go!");
    	        btn.setOnClickListener(new Button.OnClickListener() {
    	            public void onClick(View v) {
    				Kreis kreis = new Kreis(v.getContext());
    	            	ll.addView(kreis);
    	            }
    	        });

    	        ll.addView(btn);
    	        setContentView(ll);

    	    }
 }

und

Java:
 public class Kreis extends View {

	private Paint myPaint;
	private static int aufrufe = 0;

	public Kreis(Context context) {
		super(context);
		setPaintAttributes();
		aufrufe += 25;		
	}
	
	private void setPaintAttributes() {
		myPaint = new Paint();
		myPaint.setAntiAlias(true);
		myPaint.setStyle(Paint.Style.FILL);
		myPaint.setColor(Color.GREEN);
		}
		
		protected void onDraw(Canvas canvas) {
		canvas.drawColor(Color.WHITE);
		canvas.drawCircle(10.0f, 20.0f + aufrufe, 10.0f, myPaint);
		}
}
 
Du zeichnest ja auch nur einen. Wenn du mehrere zeichnen willst, dann musst du dir merken wieviel von was zu zeichnen ist.

onDraw findet das Canvas oder zu Deutsch auch die Leinwand immer leer vor und füllt sie bei jedem Aufruf erneut.
 
Danke für die Rückmeldung!

hm, gibt es eine Möglichkeit, einfach die "aktuelle Leinwand" (also die schon teilweise bemalte) zu übergeben und auf ihr dann weiterzumalen? (ich weiß nicht, wie ich mit dem canvas umgehe)

Ansonsten meinst du, müsste ich mir irgendwie außerhalb der onDraw-Methode merken, welche Kreise bereits gezeichnet wurden!?! Ich denke das ist als solches nicht allzu problematisch, aber sicherlich nicht sehr elegant, da ich immer das gesamte canvas neuzeichnen müsste. ich will ja aber nur einen kleinen Teil hinzufügen.
Jemand noch eine elegantere Lösung?
 
So läuft das nun einmal. Ist ja bei anderen GUI-Frameworks nicht anders. (Swing, Winforms, etc.)

Aber als Alternative kannst du in ein Bitmap zeichnen und diese wieder verwenden.
 
Ok, dann werd ichs einfach erstmal so speichern!

Das mit dem bitmap find ich auch ne gute Idee, werd ich dann auch noch ausprobieren, da bin ich aber nicht fit drin, da muss ich erst mal schaun, wie das geht! Aber das dann bei Zeiten!

Vielen Dank!
 

Neue Themen


Zurück
Oben