Problem ImageButton und dynamische Bitmapänderung

W

womic

Neues Mitglied
0
Hallo,

im wesentlichen möchte ich eine Bitmap dynamisch ändern und mit einem ImageButton anzeigen.

- das Bild habe ich in den Resourcen hinzugefügt

Code:
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

imgbu = (ImageButton)findViewById(R.id.imageButton1);
        
        imgbu.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
              
                Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.imgtest);
                
                Canvas c = new Canvas();
                c.drawBitmap(b, 0, 0, null);
                
                Paint p = new Paint();
                p.setColor(color.black);
                p.setTextSize(24);
                c.drawText("myTEXT", 20, 20, p);
                
                imgbu.setImageBitmap(b);
            }
            
        }
        ); 
}
1. das Bild wird zwar angezeigt, aber der Text kommt nicht
2. nach dem 3-5. mal klicken stürzt das Programm ab, bzw. beendet sich

In vielen Anleitungen habe ich folgende Zeile gefunden:
Canvas c = new Canvas(myBitmap);

Aber damit stürzt die App immer ab (myBitmap ist natürlich mit der Bitmap aus den Resourcen gefüllt)

Kann mir jemand hier weiterhelfen?
Danke.
 
Zuletzt bearbeitet:
Wegen dem Text - keine Ahnung

Aber du erzeugst das Bitmap bei jedem Knopfdruck erneut. du gibst es aber nie wieder frei (recycle verwenden). Das führt, je nach Grösse des BM irgendwann zu Problemen. BM haben nämlich eine eigene Speicherverwaltung und unterliegen nicht immer der normalen Garbage Collection.
 
  • Danke
Reaktionen: womic
Das stimmt. Da es nur ein erster Test war, habe ich darauf nicht geachtet.

Folgendes habe ich geändert:

- die Bitmap wird nun in ... onCreate ... einmal erzeugt
- die ... onClick ... sieht nun wie folgt aus:
Code:
                Bitmap myBitmap = m_myBitmap.copy(Bitmap.Config.ARGB_8888, true);
                
                Canvas c = new Canvas(myBitmap);

                Paint paint = new Paint();
                paint.setColor(Color.BLACK);
                paint.setTextSize(14);
               
                c.drawText("myTEXT", 20,20, paint);
                m_button.setImageBitmap(myBitmap);
Das "copy" mit der Bitmap scheint wichtig zu sein.
Auf jeden Fall funktioniert es nun :)

Danke.
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
127
swa00
swa00
Laser5001
Antworten
3
Aufrufe
650
swa00
swa00
W
  • WuDiDong
Antworten
3
Aufrufe
767
jogimuc
J
Zurück
Oben Unten