1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Problem ImageButton und dynamische Bitmapänderung

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von womic, 04.02.2011.

  1. womic, 04.02.2011 #1
    womic

    womic Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    04.02.2011
    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: 04.02.2011
  2. klausa2, 04.02.2011 #2
    klausa2

    klausa2 Fortgeschrittenes Mitglied

    Beiträge:
    298
    Erhaltene Danke:
    20
    Registriert seit:
    08.07.2009
    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.
     
    womic bedankt sich.
  3. womic, 05.02.2011 #3
    womic

    womic Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    04.02.2011
    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.
     

Diese Seite empfehlen