Italian [B4A] Estrai icona e usala nel titolo - BitmapDrawable

Elric

Well-Known Member
Licensed User
Ciao a tutti e buon anno!

Premessa: uso le Adaptive Icons (https://www.b4x.com/android/forum/threads/adaptive-icons.95244/).

Siccome non ho voglia di riempire il FileManager di immagini e doppioni, ho pensato di ricavarmi l'immagine dell'app dall'icona:
B4X:
        Dim pm As PackageManager
        Dim myIcon As BitmapDrawable = pm.GetApplicationIcon(Application.PackageName)
        ImageView1.Background = myIcon
Questo codice funziona e produce una BitmapDrawable - infatti il comando "pm.GetApplicationIcon" restituisce un "android.graphics.drawable.Drawable".

Fin qui tutti contenti.

Ma io voglio inserirla nel titolo della B4XPage ed eventualmente in una B4XImageView. Qui mi inceppo.

Per inserire un'immagine nel titolo, questo codice (https://www.b4x.com/android/forum/threads/activity-title-icon.80235/post-508179) funziona ma richiede un'immagine nel FileManager, mentre io vorrei prenderlo dall'icona dell'app.

B4X:
    Dim pm As PackageManager
    Dim myIcon As BitmapDrawable = pm.GetApplicationIcon(Application.PackageName)
    Dim myBmp As Bitmap
    myBmp.Initialize3(myIcon.Bitmap)
   
    Dim cs As CSBuilder
    cs.Initialize
    cs.Append($""$).Image(myBmp, 40dip, 40dip, False).Append($" MyApp"$)
    cs.PopAll
    B4XPages.SetTitle(Me, cs)
Questo codice funziona benissimo se non uso le Adaptive Icons, mentre con le Adaptive Icons va in crash:
B4X:
** Service (starter) Start **
** Activity (main) Create (first time) **
Error occurred on line: 34 (B4XMainPage)
java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
    at anywheresoftware.b4a.objects.drawable.BitmapDrawable.getBitmap(BitmapDrawable.java:39)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
    at anywheresoftware.b4a.debug.Debug.delegate(Debug.java:262)
    at b4a.example.b4xmainpage._b4xpage_created(b4xmainpage.java:108)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.debug.Debug.CallSub4(Debug.java:318)
    at anywheresoftware.b4a.debug.Debug.CallSubNew2(Debug.java:285)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.keywords.Common.CallSubDebug2(Common.java:1140)
    at b4a.example.b4xpagesmanager._createpageifneeded(b4xpagesmanager.java:1072)
    at b4a.example.b4xpagesmanager._showpage(b4xpagesmanager.java:429)
    at b4a.example.b4xpagesmanager._addpage(b4xpagesmanager.java:249)
    at b4a.example.b4xpagesmanager._addpageandcreate(b4xpagesmanager.java:263)
    at b4a.example.b4xpagesmanager._initialize(b4xpagesmanager.java:169)
    at b4a.example.main._activity_create(main.java:421)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
    at b4a.example.main.afterFirstLayout(main.java:105)
    at b4a.example.main.access$000(main.java:17)
    at b4a.example.main$WaitForLayout.run(main.java:83)
    at android.os.Handler.handleCallback(Handler.java:995)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loopOnce(Looper.java:248)
    at android.os.Looper.loop(Looper.java:338)
    at android.app.ActivityThread.main(ActivityThread.java:9067)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)

Qualcuno ha una vaga idea di qual è l'inghippo?
 

Star-Dust

Expert
Licensed User
Longtime User
Perché le icone adattive non sono BitmapDrawable, mentre le icone “classiche” sì.
 

LucaMs

Expert
Licensed User
Longtime User
1767554133884.png


https://www.b4x.com/android/forum/threads/b4a-v9-0-has-been-released.104153/post-652930
 

Elric

Well-Known Member
Licensed User
Così funziona, grazie!
B4X:
    Dim myBmpIcon As Bitmap
    myBmpIcon.Initialize3(Application.Icon)
    
    Dim cs As CSBuilder
    cs.Initialize
    cs.Append($""$).Image(myBmpIcon, 40dip, 40dip, False).Append($" MainPage"$)
    cs.PopAll
    B4XPages.SetTitle(Me, cs)
 
Top