SUIT - Skinnable User Interface Toolkit

Discussion in 'Frågor, support och diskussion' started by asperon, Feb 4, 2010.

  1. asperon

    asperon Adult Droid Medlem

    Joined:
    Aug 6, 2009
    Messages:
    586
    Likes Received:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Denna tråd är till för att diskutera ett gemensamt sätt att skinna Android widgets. Ideen går ut på att man renderar hela widgeten som en bild, vilken i sin tur byggs upp av en xml fil samt ett valfritt antal bilder, som lagras i en zip.

    Jag har gjort ett snabbt proof of concept, med en layout som bara innehåller en imageview och sedan testat följande kod (med en bild lagd i rooten på mitt sd kort)

    Code:
    RemoteViews remoteViews;
    remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
    String sdcard = Environment.getExternalStorageDirectory().toString();
    Bitmap old_icon = BitmapFactory.decodeFile(sdcard + "/background.png"); ;
    Bitmap icon = Bitmap.createBitmap(420,109,Config.ARGB_8888);
    Canvas canvas = new Canvas(icon);
    Paint paint = new Paint();
    paint.setColorFilter(null);
    canvas.drawBitmap(old_icon,0,0,paint);
    paint.setTypeface(Typeface.DEFAULT_BOLD); 		
    paint.setAntiAlias(true);
    paint.setTextAlign(Align.CENTER);
    paint.setColor(Color.WHITE);
    paint.setTextSize(12);
    canvas.drawText("lala", 36, 19, paint);
    remoteViews.setImageViewBitmap(R.id.widget_image, icon);
    
    Tanken är alltså att man läser in en xml fil, där man anger bakgrund (komplett med marginaler osv) samt alla de element som widgeten behöver. Detta gör att man om man vill kan ha stöd för flera widgets i samma skin fil om man av någon anledning skulle vilja det.

    Någon som ser några problem med denna ide? Man kan tänka sig att man bara vid uppstart renderar de delar av vyn som är statiska och sedan utgår från denna förrenderade vy när man ska uppdatera det dynamiska innehållet.
     
  2. Kaj

    Kaj Senior Droid Medlem

    Joined:
    Jun 12, 2009
    Messages:
    1 768
    Likes Received:
    44

    MINA ENHETER

    Nice såg detta nu. Kommer inte riktigt ihåg var det var jag stöp. Nu tror jag mer och mer på denna idén.

    Några frågor:

    * Hur skall man veta vilken storlek man skall generera?
    Man vill ju att det skall vara en bild som är i rätt storlek för den widget/device man har. (Så att bilden inte behöver skalas)

    * Hur skall de som gör skins speca plats för t.ex texter. Skall man försöka använda relativa pixlar, eller %? Att ange i "äkta" pixlar är ju inte så bra.

    * Har du testat någon prestanda på detta?
     
    Last edited: Feb 5, 2010
  3. asperon

    asperon Adult Droid Medlem

    Joined:
    Aug 6, 2009
    Messages:
    586
    Likes Received:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Storlek får man nog speca, vill man skippa skalningen så får man nog ha med flera olika versioner av bilderna i zip:en, eller så får man göra olika skin för olika upplösningar. Alla tre fungerar ju på sätt och vis (tittade lite i power control widgeten och den gör ju med en patch 9 png, ser bra ut både på min magic och min nexus).

    Placering beror väl lite på hur man löser skalningen, har man upplösningsspecifika sektioner eller hela skin paket så löser ju det sig, skalar man så får man väl ange i förhållande till de bilder man använder.

    Inte testat prestanda alls, men då man ju inte uppdaterar widgeten så ofta så borde det inte vara något problem, även om du tillåter uppdatering var 5:e minut så borde det vara lungt.
     
  4. Kaj

    Kaj Senior Droid Medlem

    Joined:
    Jun 12, 2009
    Messages:
    1 768
    Likes Received:
    44

    MINA ENHETER

    Jag var lite otydlig. Jag menade att om man även rendrerar texten så vill man inte att den färdigrendrerade bilden skalas upp eller ned, utan då skall man rendrera till en bild som exakt motsvarar widgetens storlek. Dvs, att skala ikonerna (som är bilder) ser jag inte som något större problem, men text skall vara knivskarp.

    Text och ikonplacering borde vara i relativa enheter så att det t.ex funkar både på tattoo, magic och nexus. Sedan kan man givetvis vilja ha högupplösta skins för nexus, men det skall mer ses som bonus.

    När jag gör uppdateringar av mina widgets (och jag har sett flera personer som kör 4st samtidigt) så händer det att jag gör flera omritningar i sekvens, men det borde som du säger inte vara något problem då heller. Vi pratar ju inte om att göra ett spel.
     
  5. asperon

    asperon Adult Droid Medlem

    Joined:
    Aug 6, 2009
    Messages:
    586
    Likes Received:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Det tror jag inte ska vara några problem, ska testa att köra mitt proof of concept på lite olika storlekar i emulatorn under helgen, ser dock ingen anledning varför det inte skulle fungera, framför allt då ju texten är rätt oberoende av vilken upplösning man har, 11pt är ju lika stort på alla skärmar.
     
  6. Kaj

    Kaj Senior Droid Medlem

    Joined:
    Jun 12, 2009
    Messages:
    1 768
    Likes Received:
    44

    MINA ENHETER

    Ja, men det är alltså denna saken jag undrar över vad man skall göra med:

    Bitmap icon = Bitmap.createBitmap(420,109,Config.ARGB_8888);

    Om man t.ex har en widget som är 2x1 på en magic/hero så skall ju storleken på bitmapen då förenklat (skippar marginaler osv) vara 320 / 2 = 160 pixlar. Om man har en tatto skall den vara 240 / 2, och en Nexus 480 / 2. Om man är i roterat läge skall man ändra storlekarna osv.

    Det är nog enkelt att kolla upplösningen på den skärmen man just nu kör på, men sedan måste man tänka på marginaler m.m.

    Det är inte så att jag är mot idén eller försöker skjuta den i sank, tänker bara på möjliga felfall som man måste kolla upp. :)
     
  7. asperon

    asperon Adult Droid Medlem

    Joined:
    Aug 6, 2009
    Messages:
    586
    Likes Received:
    94
    Operatör:
    Tele2
    Telefon:
    Pixel 6

    MINA ENHETER

    Operatör:
    Tele2
    Telefon:
    Pixel 6
    Tanken är ju att komma på alla nackdelar, så ös på bara. Har inte kollat upp det med det måste ju gå att få reda på hur stor skärmytan är, eller iaf hur stor en DIP är och sedan multiplicera det med widgetstorleken. Om alla bilderna i zipen är korrekta i storlek mot varandra så får man ju även reda på ration som grejerna ska skalas efter att man räknat ut hur stor bakgrunden ska vara. Som sagt, ska se till att testa detta under helgen så återkommer jag med mina slutsatser.