
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордЭреЗрдВ - рдЬреЛ рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛ред рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рдЖрд░рд╛рдорджрд╛рдпрдХ рдШрдбрд╝реА рдЪрд╛рд╣рддрд╛ рдерд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдРрд╕реЗ рд╡реЙрд▓рдкреЗрдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рд╕реНрдХреНрд░реАрди рдХреЗ рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрдиреЗ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдШрдбрд╝реА рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╣реИрдВред рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдШрдбрд╝реА рд╕реНрдХреНрд░реАрди рдкрд░ рдмрд┐рдЦрд░ рдЬрд╛рдП, рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧреАред
рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдПрдХ рд╕реЗрд╡рд╛ (рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рд╣реИрдВ, рдФрд░ рдПрд╕рдбреАрдХреЗ рдореЗрдВ рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рддреИрдпрд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛:
<service android:name="LiveWallpaperService" android:enabled="true" android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.BIND_WALLPAPER"> <intent-filter android:priority="1" > <action android:name="android.service.wallpaper.WallpaperService" /> </intent-filter> <meta-data android:name="android.service.wallpaper" android:resource="@xml/wallpaper" /> </service>
рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдЗрдиреЗрдВ
рдПрдВрдбреНрд░реЙрдЗрдб рд╣реИрдВ: рдЕрдиреБрдорддрд┐ рдФрд░
рдЗрд░рд╛рджрд╛-рдлрд╝рд┐рд▓реНрдЯрд░рдлрд┐рд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЛрдбрд┐рдВрдЧред рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рдВрд╢рдЬ рдХреНрд▓рд╛рд╕
рд╡реЙрд▓рдкреЗрдкрд░ рдмрдирд╛рдПрдЧреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд
рдХрд░реЗрдВрдЧреЗ, onDestroy, onDestroy, onVisibilityChanged, onSurfaceChanged, onSurfaceCreated, onSurfaceTestroyedрдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕рд┐рд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВрдЧреАред рдЙрдирдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдмреИрдЯрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рджреГрд╢реНрдпрддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╡реЙрд▓рдкреЗрдкрд░ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдФрд░ рдмрдВрдж рдХрд░рдирд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
@Override public void onVisibilityChanged(boolean visible) { if (visible) { painting.resumePainting(); } else {
рд╣рдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдкрд░ рдФрд░ рдЪрд┐рдХрдиреА рд╣реЛред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдФрд░
рдереНрд░реЗрдб рд╡рдВрд╢рдЬ рд╡рд░реНрдЧ рдмрдирд╛рдПрдБред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
рдкреЗрдВрдЯрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ:
public ClockWallpaperPainting(SurfaceHolder surfaceHolder, Context context, int fontColor, int backgroundColor) { this.surfaceHolder = surfaceHolder; this.context_ = context; clockFont_ = Typeface.createFromAsset(context.getAssets(), "digital_font.ttf"); textPainter_.setTypeface(clockFont_); textPainter_.setTextSize(30); setPreferences(fontColor, backgroundColor); this.wait_ = true; } @Override public void run() { this.run_ = true; Canvas c = null; while (run_) { try { c = this.surfaceHolder.lockCanvas(null); synchronized (this.surfaceHolder) { doDraw( c ); } } finally { if (c != null) { this.surfaceHolder.unlockCanvasAndPost( c ); } }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдмрд╕
doDraw () рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рддрдм
рд░реЛрдХрддреЗ рд╣реИрдВ рдЬрдм рдбреЗрд╕реНрдХрдЯреЙрдк рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдЦреБрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
private void doDraw(Canvas canvas) { Date currentTime = new Date();
рд╕реЗрд╡рд╛ рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╡реЙрд▓рдкреЗрдкрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЬрд╡рд╛рдм рджреЗ:
@Override public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) { painting.setOffset(xOffset); Log.d("Clock", String.format("off:%f-%f step:%f - %f px: %d - %d", xOffset, yOffset, xStep, yStep, xPixels, yPixels)); }
рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП,
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рдЙрдиреНрд╣реЗрдВ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧ рднреАред Xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдорд╛рдиреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╡реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рда рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдЪреБрдирдиреЗ рджреЗрдВред
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/settings_title"> <ListPreference android:key="preference_font_color" android:title="@string/preference_font_color_title" android:summary="@string/preference_font_color_summary" android:entries="@array/color_names" android:entryValues="@array/color_values" /> <ListPreference android:key="preference_background_color" android:title="@string/preference_background_color_title" android:summary="@string/preference_background_color_summary" android:entries="@array/color_names" android:entryValues="@array/color_values" /> </PreferenceScreen>
рдпрд╣ рдЕрдВрдд рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЖрдк рдЗрд╕реЗ
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдЕрдкрдиреЗ рд╡реЙрд▓рдкреЗрдкрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
рдпрд╣рд╛рдВ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ