Всем привет. Сегодня хотел бы поделиться приемом создания живой обоины под Android 2.1 c возможностью прокрутки изображения.
    Предлагаю определится с environment-ом без отлагательств и приступить к кодингу в Eclipse, тестированию в Android SDK and AVD Manager эмуляторе, и заливке на телефон, который по интерактивности (меньше касаний для звонка, быстрая навигация via GoogleMaps с возможностью позвонить) сейчас мне больше напоминает телефон-навигатор. Кто знает, может быть после очередной итерации под кодовым названием froyo гуглы подумают о создании 2D записной книги, развернув ее на карту?
    Опишу создание приложения from scratch для тех кто newbie. Вам понадобится Android JDK a также ADT ну и Eclipse само собой. Сложностей с установкой плагина который ADT for Eclipse у меня не было, и у вас не будет значит. После перезагрузки IDE во вкладке Windows появится «Android SDK and AVD Manager». Создавайте новый эмулятор устройства с API Level 7, то есть Android 2.1 ну или API Level 8, Android 2.2, но не ниже, так как Live Wallpaper feature в ранних версиях попросту не было.
    В нашем приложении в качестве картинки используется jpg размером 640х533. Замостить ею весь экран невозможно, в таких случаях поможет скроллинг. Предлагаю сфокусироваться лишь на горизонтальной прокрутке, которую вы организовываете как в пределах к примеру основного хомскрина, так и переходе на соседние. В тестируемом девайсе HTC Desire, к слову, имеется 7 хомскринов, поэтому наверное не имеет смысла ограничиваться лишь фронтальным. Вы конечно же понимаете, что одно и тоже изображение будет иметь разный вид на устройстве c density 240, 160 и 120, поэтому важно заранее знать диагональ экрана и плотность, если ваша апликуха не способна сама определять эти параметры ну или если вы не ставите себе такую задачу, нацеливаясь на определенную модель. В обоих случаях связь между физическими и отображаемыми размерами рассчитываются по формулам:
    realScreenWidht=screenWidth/(density/160)
    realScreenHeight=screenHeight/(density/160),
то есть для HTC Desire с WVGA dimension (480x800), и диагональню 3.3"-4.0", (with high density, hdpi, 240) расчет размера нужной нам картинки, которая по высоте занимает весь экран, выглядит следующим образом:
    density/160 = 1.5
    realScreenHeight=800/1.5=533
По ширине размер картинки занимает 2 хомскрина, следовательно
    realScreenWidht=480*2/1.5=640
    То есть с теорией и окружением разобрались, предлагаю создать Android проект с именем ScrollableLiveWallpaper, выбрав Build Target как Android 2.1. Application name устанавливается как ScrollableLiveWallpaper, package — com.scrollable.live.wallpaper. В поле имени Activity вводится имя (проекта, в нашем случае) с постфиксом, то есть ScrollableLiveWallpaperActivity, согласно негласному name convention.
    Далее займемся превращением кокона (Activity) в бабочку (Live Wallpaper), для чего откроем AndroidManifest.xml, напрочь забывая про ScrollableLiveWallpaperActivity.java. Во вкладке Application нам интересно убедиться что в поле узлов приложения указан класс ScrollableLiveWallpaperActivity, удаляем его со всеми атрибутами и фильтрами системных событий. Живая обоина является сервисом, который создается просто:
в новом классе ScrollableLiveWallpaperService наследуемся от WallpaperService. Обязательный для имплементации метод нужен лишь для того, чтобы запустить движок ScrollableLWEngine

public class ScrollableLiveWallpaperService extends WallpaperService{
	public static final String SHARED_PREFS_NAME="settings";
	
	@Override
	public Engine onCreateEngine() {
		return new ScrollableLWEngine();
	}
	
	class ScrollableLWEngine extends Engine implements OnSharedPreferenceChangeListener {
		@Override
		public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
		}
	}
}

Давайте вернемся в AndroidManifest.xml и добавим в узлы сервис:
1

фильтр
2

и метаданные, нужные для создания Preference Screen
3

В папке res создаем xml/scrollable.xml:
<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
	android:thumbnail="@drawable/icon"
	android:description="@string/app_name"
	android:settingsActivity="com.scrollable.live.wallpaper.preferences.ScrollablePreferences"/>

создаем класс ScrollablePreferences в пакете com.scrollable.live.wallpaper.preferences:
public class ScrollablePreferences extends PreferenceActivity implements 
                   OnSharedPreferenceChangeListener{

	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		getPreferenceManager().
                       setSharedPreferencesName(ScrollableLiveWallpaperService.SHARED_PREFS_NAME);
		addPreferencesFromResource(R.xml.preferences);
		getPreferenceManager().
                       getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
	}

	@Override
	public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
	}
	
	@Override
	protected void onResume() {
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		getPreferenceManager().
                       getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
		super.onDestroy();
	}
}

Preferences Screen Activity почти прикручен к сервису. Осталось создать preferences.xml в res/xml:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:title="@string/settings"
        android:key="Scrollable_settings">
    <ListPreference
            android:key="key_speed_scroll"
            android:title="@string/settings_scroll_speed_title"
            android:summary="@string/settings_scroll_speed_summary"
            android:entries="@array/speed_scroll_keynames"
            android:entryValues="@array/speed_scroll_keyvalues" />
</PreferenceScreen>

В strings.xml добавляем
	<string name="settings">Settings</string>
	<string name="settings_scroll_speed_title">Select Scroll Speed</string>
	<string name="settings_scroll_speed_summary">Choose speed of the scrolling</string>

Preferences Screen будет содержит вертикальный список из 7 radiobutton элементов, имя и значение каждого из которых хранятся в ресурсе под названием values/array.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string-array name="speed_scroll_keynames">
        <item>"First"</item>
        <item>"Second"</item>
        <item>"Third"</item>
        <item>"Fourth"</item>
        <item>"Fifs"</item>
        <item>"Sixth"</item>
        <item>"Seventh"</item>
    </string-array>

    <string-array name="speed_scroll_keyvalues">
        <item>"1"</item>
        <item>"2"</item>
        <item>"3"</item>
        <item>"4"</item>
        <item>"5"</item>
        <item>"6"</item>
        <item>"7"</item>
    </string-array>
</resources>

Перед запуском живой обои добавим в список узлов приложения класс преднастроек:
4
    Обоина готова к запуску