Meztelen csonttal élő háttérkép sablon Androidra

A TechRepublic olvasója javasolta, hogy készítsek egy oktatóanyagot egy élő háttérkép létrehozásáról. Az élő háttérkép az Android 2.1-hez hozzáadott funkció, amely lehetővé teszi a telefon tényleges háttérének vagy asztalának működését, mint egy alkalmazás. Képes animálni, rendszerhívásokat kezdeményezni és kapcsolatba lépni a felhasználóval. A működő szolgáltatás jó példája az alapértelmezett Nexus háttérkép, amely a Nexus One-val szállítást kezdett el. A Nexus élő háttérképe (A ábra ), amely „egy ideghálózaton belüli látszatnak” számít, színes nyomok sorozatait ábrázolja, amelyek úgy változnak, hogy a felhasználó megérinti a telefon kijelzőjét. A ábra

Nexus élő háttérkép

A fejlesztő képzeletétől függ, hogy meghatározza-e egy adott élő háttérkép. Az élő háttérképek Android-dokumentációja alapos, és még demonstrációt is tartalmaz. Mivel azonban építészetileg lényegesen különbözik a szokásos Android-alkalmazásoktól, a Google által biztosított mintakód, valamint a legtöbb internetes oktatóprogram első pillantásra gyakran kissé félelmetes.

Ennek az oktatóanyagnak az írása során a célom nem egy csillag élő háttérkép készítése, hanem a szükséges kód minimálisra történő lecsupaszítása, ezáltal a folyamat demisztifikálása és remélhetőleg elindulás számos olyan kezdő Android-programozótól, akik talán elkerültem az élő háttérkép kódolását. a múlt. Fontolja meg, mit fogunk készíteni ebben a bejegyzésben, és befejezni a jövő heti bejegyzésben kevésbé a kitöltött alkalmazást és inkább a saját élő háttérkép-projektjeinek sablonját.

Az oktatóanyaggal együtt járó forráskódot itt töltheti le. Különös figyelmet kell fordítani a projektbeállítási követelményekre, mivel azok több helyen eltérnek a normaktól. Készen állsz az induláshoz?

1. Az Eclipse alkalmazásban hozzon létre egy új Android alkalmazást. Feltétlenül célozza az Android 2.1 vagy újabb verziót. Ne engedje, hogy a projekt varázsló automatikusan hozzon létre tevékenységet a projekthez.

2. Az új projekt / res könyvtárában hozzon létre egy XML mappát. A mappába adjon hozzá egy új fájlt, a wallpaper.xml néven.

 wallpaper.xml 

"1.0" encoding = "UTF-8" ?>

xmlns: android = http://schemas.android.com/apk/res/android

android: thumbnail = "@ húzható / ikon"

android: description = "@ string / app_name" />

3. Helyesen konfigurálja az AndroidManifest.xml fájlt. Az élő háttérkép manifesztje különbözik a legtöbb szokásos alkalmazástól, amelyet ebben a blogban készítünk, és még különbözik a szokásos szolgáltatástól (az alaposztály, amelyből az élő háttérképek származnak). Számos lehetőség áll rendelkezésre az élő háttérképekhez, de most megpróbáltam a tartalmat csak az alapvető dolgokra korlátozni.

 AndroidManifest.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

package = "com.authorwjf.live_wallpaper_p1" android: versionCode = "1"

android: versionName = "1.0" >
 "TR Demo Live Wallpaper" android: icon = "@ húzható / ikon" > 
 "TR Demo Live Wallpaper" 
 android: name = ".DemoWallpaperService" 
 android: engedély = "android.permission.BIND_WALLPAPER" > 
 "android.service.wallpaper.WallpaperService" /> 
 "Android.service.wallpaper" 
 android: resource = "@ xml / wallpaper" /> 
 "7" /> 
 "android.software.live_wallpaper" /> 

4. A vízvezeték szerelésével most megvalósíthatjuk az /src/DemoWallpaperService.java fájlt. Először egy külső osztály létrehozásával kezdjük, amely kiterjeszti az Android WallpaperService osztályt.

 DemoWallpaperService.java csomag com.authorwjf.live_wallpaper_p1; 
 import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Handler; import android.service.wallpaper.WallpaperService; import android.view.SurfaceHolder; 
 a nyilvános osztályú DemoWallpaperService kiterjeszti a WallpaperService { 
 @A nyilvános motor onCreateEngine () { visszatérése új DemoWallpaperEngine (); } 
 } 

5. Szeretnénk hozzáadni egy belső osztályt, amely létrehozza a származtatott háttérkép motorunkat. Mivel a szolgáltatás folyamatosan működik, nagyon fontos, hogy az életciklus eseményeit megfelelően kezeljük.

 DemoWallpaperService.java magánosztály DemoWallpaperEngine kiterjeszti a motort {  privát logikai mVisible = false ; magán végső kezelő mHandler = új kezelő (); private final Runnable mUpdateDisplay = new Runnable () { 

@Override

nyilvános érvénytelen futás () {

húz();

}};
 @A nyilvános void felülbírálása onVisibilityChanged (logikailag látható) { 

mVisible = látható;

ha (látható) {

húz();

} egyéb {

mHandler.removeCallbacks (mUpdateDisplay);

}

}
 @A nyilvános érvénytelenség felülírása az onSurfaceChanged (SurfaceHolder tartó, int formátum, int szélesség, int magasság) { 

húz();

}
 @A nyilvános void felülbírálása az onSurfaceDestroyed (SurfaceHolder tartó) { super .onSurfaceDestroyed (tulajdonos); mVisible = hamis ; 

mHandler.removeCallbacks (mUpdateDisplay);

}
 @A nyilvános void felülbírálása onDestroy () { super .onDestroy (); mVisible = hamis ; 

mHandler.removeCallbacks (mUpdateDisplay);

}

}

6. Addig, amíg a végrehajtott kód általános az összes élő háttérképre; Most a draw () módszer belsejében hozzáadjuk az élő háttérképünkre jellemző kódot. Nem fogunk tenni semmi szörnyen kreatív vagy hatékony tevékenységet. Alapvetően 100ms-enként töröljük a teljes képernyőt, majd a vászonobjektummal fesssük a rendszer milliszekundum időzítőjét az asztalra.

 DemoWallpaperService.java 
 magán érvénytelen sorsolás () { 
 SurfaceHolder tartó = getSurfaceHolder (); 
 Vászon c = null ; 
 próbáld { 
 c = tartó. lockCanvas (); 
 if (c! = null ) { 
 Festék p = új festék (); 
 p.setTextSize (20); 
 p.setAntiAlias ​​( igaz ); 
 Karakterlánc szöveg = "rendszeridő:" + hosszú. toString (Rendszer. currentTimeMillis ()); 
 float w = p.measureText (szöveg, 0, text.length ()); 
 int eltolás = ( int ) w / 2; 
 int x = c.getWidth () / 2 - eltolás; 
 int y = c.getHeight () / 2; 
 p.setColor (színes. FEKETE ); 
 c.drawRect (0, 0, c.getWidth (), c.getHeight (), p); 
 p.setColor (szín. FEHÉR ); 
 c.drawText (szöveg, x, y, p); 
 } 
 } végül { 
 if (c! = null ) 
 holder.unlockCanvasAndPost (c); 
 } 

mHandler.removeCallbacks (mUpdateDisplay);

if (mVisible) {

mHandler.postDalayed (mUpdateDisplay, 100);

}

}

}

7. A DemoWallpaperService.java végső verziójának az alábbiak szerint kell kinéznie - legalább a következő héten.

 DemoWallpaperService.java 
 com.authorwjf.live_wallpaper_p1 csomag ; 
 import android.graphics.Canvas; 
 import android.graphics.Color; 
 import android.graphics.Paint; 
 import android.os.Handler; 
 import android.service.wallpaper.WallpaperService; 
 import android.view.SurfaceHolder; 
 a nyilvános osztályú DemoWallpaperService kiterjeszti a WallpaperService { 
 @Override 
 public motor onCreateEngine () { 
 új DemoWallpaperEngine () visszaadása ; 
 } 
 a privát osztály a DemoWallpaperEngine kiterjeszti a motort { 
 privát logikai mVisible = false ; 
 magán végső kezelő mHandler = új kezelő (); 
 private final Runnable mUpdateDisplay = new Runnable () { 
 @Override 
 nyilvános érvénytelen futás () { 
 húz(); 
 }}; 
 magán érvénytelen sorsolás () { 
 SurfaceHolder tartó = getSurfaceHolder (); 
 Vászon c = null ; 
 próbáld { 
 c = tartó. lockCanvas (); 
 if (c! = null ) { 
 Festék p = új festék (); 
 p.setTextSize (20); 
 p.setAntiAlias ​​( igaz ); 
 Karakterlánc szöveg = "rendszeridő:" + hosszú. toString (Rendszer. currentTimeMillis ()); 
 float w = p.measureText (szöveg, 0, text.length ()); 
 int eltolás = ( int ) w / 2; 
 int x = c.getWidth () / 2 - eltolás; 
 int y = c.getHeight () / 2; 
 p.setColor (színes. FEKETE ); 
 c.drawRect (0, 0, c.getWidth (), c.getHeight (), p); 
 p.setColor (szín. FEHÉR ); 
 c.drawText (szöveg, x, y, p); 
 } 
 } végül { 
 if (c! = null ) 
 holder.unlockCanvasAndPost (c); 
 } 
 mHandler.removeCallbacks (mUpdateDisplay); 
 if (mVisible) { 
 mHandler.postDalayed (mUpdateDisplay, 100); 
 } 
 } 
 @Override 
 public void onVisibilityChanged (logikailag látható) { 
 mVisible = látható; 
 ha (látható) { 
 húz(); 
 } egyéb { 
 mHandler.removeCallbacks (mUpdateDisplay); 
 } 
 } 
 @Override 
 public void onSurfaceChanged (SurfaceHolder tartó, int formátum, int szélesség, int magasság) { 
 húz(); 
 } 
 @Override 
 public void onSurfaceDestroyed (SurfaceHolder tulajdonos) { 
 super .onSurfaceDestroyed (tartó); 
 mVisible = hamis ; 
 mHandler.removeCallbacks (mUpdateDisplay); 
 } 
 @Override 
 public void onDestroy () { 
 super .onDestroy (); 
 mVisible = hamis ; 
 mHandler.removeCallbacks (mUpdateDisplay); 
 } 
 } 
 } 
8. Most készen állunk kipróbálni. Telepítse a szolgáltatást az emulátorra az Eclipse IDE Futtatás menüjével. Várjon. Mit mondtál? Nem történt semmi? Ennek oka az, hogy továbbra is aktiválnunk kell az új háttérképet. Miután a letöltés az emulátorba befejeződött, nyomja meg a kezdőképernyőn a Menü gombot ( B ábra ). B. ábra

9. Válassza az Élő háttérképeket a másodlagos menüből ( C ábra ). C. ábra

10. Válassza ki a TR Demo háttérképet a telepített élő háttérképek közül ( D ábra ). D. ábra

11. És utoljára, de nem utolsósorban a háttérkép beállítása ( E ábra ). E ábra

Tessék, itt van! Élő, bár nem különösebben érdekes háttérkép. Az oktatóprogram második részében dolgozunk egy háttérkép-szolgáltatás kibővítésével a draw () módszer segítségével, és hozzáadunk egy konfigurációs fájlt. Szintén megosztom néhány tippet az élő háttérképek hibakeresésével kapcsolatban, amely, ha ez még nem történt veled korábban, nem mindig a legegyszerűbb feladat.

© Copyright 2020 | mobilegn.com