<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Android%2F%E3%83%A9%E3%82%A4%E3%83%96%E5%A3%81%E7%B4%99%E4%BD%9C%E6%88%90%2F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%BD%E3%83%BC%E3%82%B9</id>
		<title>Android/ライブ壁紙作成/サンプルソース - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Android%2F%E3%83%A9%E3%82%A4%E3%83%96%E5%A3%81%E7%B4%99%E4%BD%9C%E6%88%90%2F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%BD%E3%83%BC%E3%82%B9"/>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Android/%E3%83%A9%E3%82%A4%E3%83%96%E5%A3%81%E7%B4%99%E4%BD%9C%E6%88%90/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%BD%E3%83%BC%E3%82%B9&amp;action=history"/>
		<updated>2026-04-24T20:02:32Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Android/%E3%83%A9%E3%82%A4%E3%83%96%E5%A3%81%E7%B4%99%E4%BD%9C%E6%88%90/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%BD%E3%83%BC%E3%82%B9&amp;diff=900&amp;oldid=prev</id>
		<title>127.0.0.1: ページの作成:「画面スライドに合わせて、画像が切り替わるライブ壁紙サンプル  *AndroidLiveWallService.java  package info.nonip.AndroidLiveWallService;  import...」</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Android/%E3%83%A9%E3%82%A4%E3%83%96%E5%A3%81%E7%B4%99%E4%BD%9C%E6%88%90/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%BD%E3%83%BC%E3%82%B9&amp;diff=900&amp;oldid=prev"/>
				<updated>2015-05-19T18:18:51Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「画面スライドに合わせて、画像が切り替わるライブ壁紙サンプル  *AndroidLiveWallService.java  package info.nonip.AndroidLiveWallService;  import...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;画面スライドに合わせて、画像が切り替わるライブ壁紙サンプル&lt;br /&gt;
&lt;br /&gt;
*AndroidLiveWallService.java&lt;br /&gt;
 package info.nonip.AndroidLiveWallService;&lt;br /&gt;
 import android.graphics.Bitmap;&lt;br /&gt;
 import android.graphics.BitmapFactory;&lt;br /&gt;
 import android.graphics.Canvas;&lt;br /&gt;
 import android.graphics.Color;&lt;br /&gt;
 import android.os.Handler;&lt;br /&gt;
 import android.service.wallpaper.WallpaperService;&lt;br /&gt;
 import android.view.MotionEvent;&lt;br /&gt;
 import android.view.SurfaceHolder;&lt;br /&gt;
 import android.util.Log;&lt;br /&gt;
 public class AndroidLiveWallServiceActivity extends WallpaperService {&lt;br /&gt;
   /** Called when the activity is first created. */&lt;br /&gt;
   /** 描画用のハンドラを用意 **/&lt;br /&gt;
   private final Handler mHandler = new Handler();&lt;br /&gt;
   @Override&lt;br /&gt;
   public Engine onCreateEngine() {&lt;br /&gt;
     // 描画用の自作Engineクラスを返す&lt;br /&gt;
     return new LiveEngine();&lt;br /&gt;
   }&lt;br /&gt;
   /** 描画を行うEngineクラス **/&lt;br /&gt;
   public class LiveEngine extends Engine {&lt;br /&gt;
     // ここに描画用の処理を記述していく&lt;br /&gt;
     /** イメージ **/&lt;br /&gt;
     private Bitmap image;&lt;br /&gt;
     /** x座標 **/&lt;br /&gt;
     private int x = 0;&lt;br /&gt;
     /** y座標 **/&lt;br /&gt;
     private int y = 0;&lt;br /&gt;
     private int imageSelect = 1;&lt;br /&gt;
     /** 描画用のRunnableオブジェクト **/&lt;br /&gt;
     private final Runnable drawRunnable = new Runnable(){&lt;br /&gt;
       public void run(){&lt;br /&gt;
         // 描画メソッドを呼び出す&lt;br /&gt;
         drawFrame();&lt;br /&gt;
       }&lt;br /&gt;
     };&lt;br /&gt;
     /** 表示状態フラグ **/&lt;br /&gt;
     private boolean visible;&lt;br /&gt;
     /** コンストラクタ **/&lt;br /&gt;
     public LiveEngine(){&lt;br /&gt;
       image = BitmapFactory.decodeResource(getResources(), R.drawable.image2);&lt;br /&gt;
     }&lt;br /&gt;
     /** Engine生成時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onCreate(SurfaceHolder surfaceHolder){&lt;br /&gt;
       super.onCreate(surfaceHolder);&lt;br /&gt;
       // タッチイベントを有効&lt;br /&gt;
       setTouchEventsEnabled(true); &lt;br /&gt;
     }&lt;br /&gt;
     /** Engine破棄時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onDestroy(){&lt;br /&gt;
       super.onDestroy();&lt;br /&gt;
       mHandler.removeCallbacks(drawRunnable);&lt;br /&gt;
       if (image != null) {&lt;br /&gt;
        // Bitmapデータの解放&lt;br /&gt;
        image.recycle();&lt;br /&gt;
        image = null;&lt;br /&gt;
      }&lt;br /&gt;
     }&lt;br /&gt;
     /** 表示状態変更時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onVisibilityChanged(boolean visible){&lt;br /&gt;
       this.visible = visible;&lt;br /&gt;
       if(visible){&lt;br /&gt;
         drawFrame();&lt;br /&gt;
       }else{&lt;br /&gt;
         mHandler.removeCallbacks(drawRunnable);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     /** サーフェイス生成時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onSurfaceCreated(SurfaceHolder surfaceHolder){&lt;br /&gt;
       super.onSurfaceCreated(surfaceHolder);&lt;br /&gt;
       Log.i(&amp;quot;tag1&amp;quot;, &amp;quot;onSurfaceCreated&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     /** サーフェイス変更時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onSurfaceChanged(SurfaceHolder holder,int format, int width , int height){&lt;br /&gt;
       super.onSurfaceChanged(holder, format, width, height);&lt;br /&gt;
       drawFrame();&lt;br /&gt;
       Log.i(&amp;quot;tag1&amp;quot;, &amp;quot;onSurfaceChanged&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     /** サーフェイス破棄時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onSurfaceDestroyed(SurfaceHolder holder){&lt;br /&gt;
       super.onSurfaceCreated(holder);&lt;br /&gt;
       visible = false;&lt;br /&gt;
       mHandler .removeCallbacks(drawRunnable);&lt;br /&gt;
       Log.i(&amp;quot;tag1&amp;quot;, &amp;quot;onSurfaceDestroyed&amp;quot;);&lt;br /&gt;
       if (image != null) {&lt;br /&gt;
        // Bitmapデータの解放&lt;br /&gt;
        image.recycle();&lt;br /&gt;
        image = null;&lt;br /&gt;
      }&lt;br /&gt;
     }&lt;br /&gt;
     /** オフセット変更時に呼び出される **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels){&lt;br /&gt;
       drawFrame();&lt;br /&gt;
       //Log.i(&amp;quot;tag1&amp;quot;, &amp;quot;xOffset=&amp;quot; + xOffset + &amp;quot; xStep=&amp;quot; + xStep + &amp;quot; xPixels=&amp;quot; + xPixels);&lt;br /&gt;
       imageSelect = (int)Math.floor(xOffset / xStep);&lt;br /&gt;
     }&lt;br /&gt;
     /** キャンバスで描画を行う **/&lt;br /&gt;
     private void drawFrame(){&lt;br /&gt;
       final SurfaceHolder holder = getSurfaceHolder();&lt;br /&gt;
       Canvas c = null;&lt;br /&gt;
       try{&lt;br /&gt;
         // キャンバスをロック&lt;br /&gt;
         c = holder.lockCanvas();&lt;br /&gt;
         if(c != null){&lt;br /&gt;
           // 描画&lt;br /&gt;
           c.drawColor(Color.GREEN);&lt;br /&gt;
           _changeImage();&lt;br /&gt;
           c.drawBitmap(image, x, y, null);&lt;br /&gt;
         }&lt;br /&gt;
         x = 0;&lt;br /&gt;
         y = 0;&lt;br /&gt;
       }finally{&lt;br /&gt;
         // Canvas アンロック&lt;br /&gt;
         if(c != null){&lt;br /&gt;
           holder.unlockCanvasAndPost(c);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
       // 次の描画をセット&lt;br /&gt;
       mHandler.removeCallbacks(drawRunnable);&lt;br /&gt;
       if(visible){&lt;br /&gt;
         mHandler.postDelayed(drawRunnable, 60);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     private void _changeImage() {&lt;br /&gt;
       if (imageSelect == 0) {&lt;br /&gt;
         image = BitmapFactory.decodeResource(getResources(), R.drawable.image0);&lt;br /&gt;
       } else if (imageSelect == 1) {&lt;br /&gt;
         image = BitmapFactory.decodeResource(getResources(), R.drawable.image1);&lt;br /&gt;
       } else if (imageSelect == 2) {&lt;br /&gt;
         image = BitmapFactory.decodeResource(getResources(), R.drawable.image2);&lt;br /&gt;
       } else if (imageSelect == 3) {&lt;br /&gt;
         image = BitmapFactory.decodeResource(getResources(), R.drawable.image3);&lt;br /&gt;
       } else if (imageSelect == 4) {&lt;br /&gt;
         image = BitmapFactory.decodeResource(getResources(), R.drawable.image4);&lt;br /&gt;
       }&lt;br /&gt;
       //Log.i(&amp;quot;tag1&amp;quot;, &amp;quot;imageSelect=&amp;quot; + imageSelect);&lt;br /&gt;
     }&lt;br /&gt;
     /** タッチイベント **/&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onTouchEvent(MotionEvent event){&lt;br /&gt;
       // 画面をタッチすると画像を切り替える&lt;br /&gt;
       switch(event.getAction()){&lt;br /&gt;
       case MotionEvent.ACTION_UP:&lt;br /&gt;
         /*&lt;br /&gt;
         if(flag){&lt;br /&gt;
           image = BitmapFactory.decodeResource(getResources(), R.drawable.image);&lt;br /&gt;
           flag = false;&lt;br /&gt;
         }else{&lt;br /&gt;
           image = BitmapFactory.decodeResource(getResources(), R.drawable.image2);&lt;br /&gt;
           flag = true;&lt;br /&gt;
         }&lt;br /&gt;
         */&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
*res/xml/wallpaper.xml&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;nowiki /&amp;gt;wallpaper&lt;br /&gt;
     xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
     android:thumbnail=&amp;quot;@drawable/ic_launcher&amp;quot;&lt;br /&gt;
     android:description=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
     android:description=&amp;quot;@string/description&amp;quot;&lt;br /&gt;
 /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*res/value/strings.xml&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;nowiki /&amp;gt;resources&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;string name=&amp;quot;app_name&amp;quot;&amp;gt;AndroidLiveWallService&amp;lt;/string&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;string name=&amp;quot;description&amp;quot;&amp;gt;AndroidLiveWallServiceDetail&amp;lt;/string&amp;gt;&lt;br /&gt;
 &amp;lt;/resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*AndroidManifest.xml&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;nowiki /&amp;gt;manifest xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
     package=&amp;quot;info.nonip.AndroidLiveWallService&amp;quot;&lt;br /&gt;
     android:versionCode=&amp;quot;1&amp;quot;&lt;br /&gt;
     android:versionName=&amp;quot;1.0&amp;quot; &amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;uses-sdk android:minSdkVersion=&amp;quot;7&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;application&lt;br /&gt;
         android:icon=&amp;quot;@drawable/ic_launcher&amp;quot;&lt;br /&gt;
         android:label=&amp;quot;@string/app_name&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;service&lt;br /&gt;
             android:name=&amp;quot;.AndroidLiveWallServiceActivity&amp;quot;&lt;br /&gt;
             android:label=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
             android:permission=&amp;quot;android.permission.BIND_WALLPAPER&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;&amp;lt;nowiki /&amp;gt;intent-filter&amp;gt;&lt;br /&gt;
                 &amp;lt;&amp;lt;nowiki /&amp;gt;action android:name=&amp;quot;android.service.wallpaper.WallpaperService&amp;quot;&amp;gt;&amp;lt;/action&amp;gt;&lt;br /&gt;
             &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;
             &amp;lt;&amp;lt;nowiki /&amp;gt;meta-data android:name=&amp;quot;android.service.wallpaper&amp;quot; android:resource=&amp;quot;@xml/wallpaper&amp;quot;&amp;gt;&amp;lt;/meta-data&amp;gt;&lt;br /&gt;
         &amp;lt;/service&amp;gt;&lt;br /&gt;
     &amp;lt;/application&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;!-- GooglePlayにライブ壁紙であることを知らせる --&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;uses-feature android:name=&amp;quot;android.software.live_wallpaper&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/manifest&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==画像を追加（drawable-mdpiディレクトリに画像を追加==&lt;br /&gt;
*res/drawable-mdpi/ic_launcher.png&lt;br /&gt;
*res/drawable-mdpi/image0.png&lt;br /&gt;
*res/drawable-mdpi/image1.png&lt;br /&gt;
*res/drawable-mdpi/image2.png&lt;br /&gt;
*res/drawable-mdpi/image3.png&lt;br /&gt;
*res/drawable-mdpi/image4.png&lt;br /&gt;
&lt;br /&gt;
==画像が置き換わらない場合==&lt;br /&gt;
bin/res/をいったん消すか。プロジェクト → クリーンでキャッシュ削除可能&lt;br /&gt;
&lt;br /&gt;
==タッチイベントが取得できないとき==&lt;br /&gt;
以下をonCreateメソッド内に追加する&lt;br /&gt;
 setTouchEventsEnabled(true);&lt;br /&gt;
&lt;br /&gt;
==onOffsetsChangedサンプル数値==&lt;br /&gt;
左から右へスライドしたときの数値サンプル&lt;br /&gt;
*au is04 regza(全5スクリーン&lt;br /&gt;
 onOffsetsChanged xOffset=0.0 xStep=0.25 xPixels=0&lt;br /&gt;
 onOffsetsChanged xOffset=0.25 xStep=0.25 xPixels=-120&lt;br /&gt;
 onOffsetsChanged xOffset=0.5 xStep=0.25 xPixels=-240&lt;br /&gt;
 onOffsetsChanged xOffset=0.75 xStep=0.25 xPixels=-360&lt;br /&gt;
 onOffsetsChanged xOffset=1.0 xStep=0.25 xPixels=-480&lt;br /&gt;
&lt;br /&gt;
*galaxys2(全4スクリーン&lt;br /&gt;
 onOffsetsChanged xOffset=0.0 xStep=-1.0 xPixels=0&lt;br /&gt;
 onOffsetsChanged xOffset=0.33333337 xStep=-1.0 xPixels=-160&lt;br /&gt;
 onOffsetsChanged xOffset=0.6666667 xStep=-1.0 xPixels=-320&lt;br /&gt;
 onOffsetsChanged xOffset=1.0 xStep=-1.0 xPixels=-480&lt;br /&gt;
&lt;br /&gt;
*docomo XPERIA SO-03C(全5スクリーン&lt;br /&gt;
 onOffsetsChanged xOffset=0.0 xStep=-1.0 xPixels=0&lt;br /&gt;
 onOffsetsChanged xOffset=0.2499912 xStep=-1.0 xPixels=-120&lt;br /&gt;
 onOffsetsChanged xOffset=0.4999884 xStep=-1.0 xPixels=-240&lt;br /&gt;
 onOffsetsChanged xOffset=0.7499875 xStep=-1.0 xPixels=-360&lt;br /&gt;
 onOffsetsChanged xOffset=0.9999922 xStep=-1.0 xPixels=-480&lt;br /&gt;
&lt;br /&gt;
*docomo MEDIAS N-01D palletui(全9スクリーン&lt;br /&gt;
 onOffsetsChanged xOffset=0.0 xStep=0.125 xPixels=0&lt;br /&gt;
 onOffsetsChanged xOffset=0.125 xStep=0.125 xPixels=-60&lt;br /&gt;
 onOffsetsChanged xOffset=0.25 xStep=0.125 xPixels=-120&lt;br /&gt;
 onOffsetsChanged xOffset=0.375 xStep=0.125 xPixels=-180&lt;br /&gt;
 onOffsetsChanged xOffset=0.5 xStep=0.125 xPixels=-240&lt;br /&gt;
 onOffsetsChanged xOffset=0.625 xStep=0.125 xPixels=-300&lt;br /&gt;
 onOffsetsChanged xOffset=0.75 xStep=0.125 xPixels=-360&lt;br /&gt;
 onOffsetsChanged xOffset=0.875 xStep=0.125 xPixels=-420&lt;br /&gt;
 onOffsetsChanged xOffset=1.0 xStep=0.125 xPixels=-480&lt;br /&gt;
&lt;br /&gt;
*emyulater(全3スクリーン&lt;br /&gt;
 onOffsetsChanged xOffset=0.0 xStep=0.5 xPixels=0&lt;br /&gt;
 onOffsetsChanged xOffset=0.5 xStep=0.5 xPixels=-240&lt;br /&gt;
 onOffsetsChanged xOffset=1.0 xStep=0.5 xPixels=-480&lt;br /&gt;
&lt;br /&gt;
上記数字は少しでもスライドすると変動する&lt;br /&gt;
&lt;br /&gt;
その他参考値&lt;br /&gt;
http://sugarspotweblog.blogspot.jp/2011/07/androidlivewallpaper.html&lt;br /&gt;
&lt;br /&gt;
==参考==&lt;br /&gt;
http://blog.global-eng.co.jp/android/2011/07/01/%E3%83%A9%E3%82%A4%E3%83%96%E5%A3%81%E7%B4%99%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>	</entry>

	</feed>