Döntsön fel, és hibakeresést végezzen az élő háttérképet az Android számára

A múlt héten lefektettük az élő háttérkép létrehozásának alapjait egy Android telefonon. Míg az alkalmazás architektúrája kissé különbözik a projektekkel, amelyekkel általában ebben a blogban foglalkozunk, addig, amíg az alapok meg vannak, a dolgok a helyére kerülnek.

Ebben az oktatóanyagban elmagyarázom, hogyan állíthat be egy háttérképet a háttérkép-szolgáltatáshoz, és megoszthatom az praktikus trükköt az élő háttérképek hibakeresésének az Eclipse IDE-ben. A kész projektfájl letölthető itt. Az archívum mindent tartalmaz, amely a múlt héten letöltött volt, valamint az új / módosított fájlokat.

1. A projektet ezen oktatóanyag első részéből fogjuk módosítani, tehát az Eclipse-ben új projekt létrehozása helyett a múlt heti projektet adjuk vissza a munkaterületre, és felkészülünk arra, hogy felvegyük ott, ahol abbahagytuk.

2. Nyissa meg az AndroidManifest.xml fájlt a / res mappában. A már korábban meghatározott címke alatt és a címke belsejében egy új tevékenység kerül beillesztésre. Ez képviseli a preferenciaképernyőnket. Az alábbiakban bemutatjuk a manifeszt végleges változatát.

 AndroidManifest.xml 

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

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

package = "com.authorwjf.live_wallpaper_p2" 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" />

"Beállítások..."

android: name = ".WallpaperPrefsActivity"

android: export = "true" >

"7" />

"android.software.live_wallpaper" />

3. Olyan XML fájlt akarunk létrehozni, amely meghatározza azokat a beállításokat, amelyeket a háttérkép testreszabásához használunk. Annak érdekében, hogy a bemutató egyszerű legyen, nem fogunk semmit megrázni. Összegyűjtjük a megjelenítendő húrot és a szöveg színét. Adjon hozzá egy új, prefs.xml nevű fájlt a / res / xml mappához.

 prefs.xml 

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

"http://schemas.android.com/apk/res/android">

"Text_to_display"

android: title = "Megjelenítendő szöveg:" />

"szöveg szín"

android: title = "Hex színérték:" />

4. Az / src mappában létre kell hoznunk a WallpaperPrefsActivity-t. A PreferenceActivity osztály kibővítésével és a prefs.xml fájlra mutatásával a platform generálja a legtöbb kódot nekünk. Az egyetlen kivétel a bemenet érvényesítése, amelyet az onPreferenceChange visszahívás során kezelünk.

 WallpaperPrefsActivity.java csomag com.authorwjf.live_wallpaper_p2; import android.graphics.Color; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.Preference.OnPreferenceChangeListener; import android.widget.Toast; 
 a nyilvános osztályba tartozó WallpaperPrefsActivity kiterjeszti az PreferenceActivity OnPreferenceChangeListener eszközöket 
 @ Felülírja a védett érvénytelen onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState); 

addPreferencesFromResource (R.xml. prefs);

Preferencia p = getPreferenceScreen (). FindPreference ("text_color");

p.setOnPreferenceChangeListener ( ez );

p = getPreferenceScreen (). findPreference ("text_to_display");

p.setOnPreferenceChangeListener ( ez ); }
 @Override 
 nyilvános logikai onPreferenceChange (Preferencia preferencia, Új érték objektum) { 
 if (preference.getKey (). equalsIgnoreCase ("text_color")) { 
 próbáld { 
 Karakterlánc-bemenet = newValue.toString (); 
 if (input.length ()! = 7) dobjon új kivételt ("Érvénytelen hosszúság"); 
 if (! input.startsWith ("#")) dobjon új kivételt ("Érvénytelen formátum"); 
 Húr: = input.string (1, 3); 
 G karakterlánc = input.sstring (3, 5); 
 B karakterlánc = input.string (5, 7); 
 int color = Szín. rgb (egész szám. parselent (r, 16), egész szám. parsellent (g, 16), egész szám. parsellent (b, 16)); 
 visszatér igaz ; 
 } fogás (e kivétel) { 
 Pirítós. makeText ( ez : "Érvénytelen hex színérték (példa bemenet: # ff0000).", Toast. LENGTH_SHORT ) .show (); 
 hamis visszaadást ; 
 } 
 } else if (preference.getKey (). equalsIgnoreCase ("text_to_display")) { 
 próbáld { 
 Karakterlánc-bemenet = newValue.toString (); 
 if (input.length () <1) dobjon új kivételt ("érvénytelen hosszúság"); 
 visszatér igaz ; 
 } fogás (e kivétel) { 
 Pirítós. makeText ( ez : "Érvénytelen megjelenítési karakterlánc.", Toast. LENGTH_SHORT ) .show (); 
 hamis visszaadást ; 
 } 

}

visszatér igaz ;

}

}

5. Az utolsó lépés a múlt héten létrehozott DemoWallpaperService fájl módosítása. A szolgáltatást először úgy módosították, hogy betöltse a preferenciáinkba az onVisibilityChanged visszahívásban, és másodszor, hogy a szöveget a megadott színűre húzza a draw () módszerben. Semmi más nem változik a múlt héthez képest. A rajz többsége, amely megváltozott a draw () metódusban, az alfa-csatorna növelésével és csökkentésével foglalkozik, hogy pulzáló hatást gyakoroljon a szövegre.

 com.authorwjf.live_wallpaper_p2 csomag ; 
 import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Handler; import android.preference.PreferenceManager; 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 (); } 
 a privát osztály a DemoWallpaperEngine kiterjeszti a motort { private boolean mVisible = false ; magán int mColor = 0; magán int mAlpha = 0; private boolean mIsCountingUp = true ; private String mText = "Hello!"; 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 ) {

//android.os.Debug.waitForDebugger ();

Festék p = új festék ();

p.setTextSize (20);

p.setAntiAlias ​​( igaz );

Húros szöveg = mText;

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 (mColor);

p.setAlpha (mAlpha);

c.drawText (szöveg, x, y, p);

if (mIsCountingUp) {

mAlpha + = 10;

if (mAlpha> 255) {

mAlpha = 255;

mIsCountingUp = false ; }
 } egyéb { 

mAlpha- = 10;

if (mAlpha <0) {

mAlpha = 0;

mIsCountingUp = true ;

}

}
 }} végül { if (c! = null ) 

holder.unlockCanvasAndPost (c);

}

mHandler.removeCallbacks (mUpdateDisplay);

if (mVisible) {

mHandler.postDalayed (mUpdateDisplay, 100);

}

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

mVisible = látható;

if (látható) {SharedPreferences prefs = PreferenceManager. getDefaultSharedPreferences (DemoWallpaperService. ez );

mText = prefs.getString ("text_to_display", "Ez az alapértelmezett.");

Húr tmp = prefs.getString ("text_color", "#ffffff");

Húr: = tmp.húzás (1, 3);

G húr: tmp.sáv (3, 5);

B húr = tmp.húzó (5, 7);

mColor = Szín. rgb (egész szám. parselent (r, 16), egész szám. parsellent (g, 16), egész szám. parsellent (b, 16));

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);

}

}

}

Tessék, itt van! Szerény, de teljesen működőképes élő háttérkép. Az egyik dolog, amelyet érdemes megjegyezni, a //android.os.Debug.waitForDebugger () megjegyzésbe iktatott felhívása; a sorsolás módszerében. Ennek az oktatóanyagnak az az előnye, hogy tesztelt kóddal dolgozik, de ha az élő háttérkép szolgáltatása hibakeresést igényel, akkor az IDE-n keresztüli töréspont megadása nem fog működni a várt módon. Fel kell vennie a waitForDebugger () hívást a forrásfájlba.

Ezzel hagyom, hogy saját élő háttérképeket készítsen. Várom, hogy letölthetem azokat az Android Marketről! Nyugodtan tegyen közzé egy linket a vitaterületen, hogy megmutassa alkotásait a többi TechRepublic tag számára.

A ábra

B. ábra

C. ábra

© Copyright 2021 | mobilegn.com