アンドロイドアプリサンプルソース ライブ壁紙編 | ゲームアプリの攻略情報から人気のスマホサービス・アプリを特集して紹介 | スマホ情報は≪アンドロック≫

アンドロイドアプリサンプルソース ライブ壁紙編

イントロダクション

今回はAndRockで開発した『ライブ壁紙「蝉」』を例に、アンドロイドアプリの開発情報を紹介します。
今回はどうやって蝉を動かしているのかを中心にソースコードの解説を行いたいと思います。

ライブ壁紙「蝉」

ライブ壁紙「蝉」の構成

この壁紙は、仰向けでくたばっている蝉をタッチすると「ビビヴィヴィーー!!」と蝉が鳴きながら暴れる、という内容です。

内部の処理としては、大きく分けて以下の三点を行っています。

  • WallpaperServiceの呼び出し
  • タッチ時の処理
  • キャンバス描画

WallpaperServiceの呼び出し

ライブ壁紙を使うためにWallpaperService呼び出します。これだけでライブ壁紙として機能します。

public class UtusemiWallPaper extends WallpaperService {
	private final Handler mHandler = new Handler();

	@Override
    public void onCreate() {

タッチ時の処理

蝉をタッチしたときに、一定の時間内に座標や傾きを変更し、蝉の再描画を繰り返します。
タッチした座標が、蝉を表示している座標内に収まっている場合だけループ処理を行っています。
ループ内では、座標の変更(move)と蝉の再描画(drawFrame)を行っています。

@Override
public void onTouchEvent(MotionEvent event) {
    mTouchX = (int)event.getX();
    mTouchY = (int)event.getY();
    // タッチされた座標がアイコン内かどうか
    if (mPositionLeft < mTouchX && mTouchX < mPositionLeft + imageWidth
     && mPositionTop < mTouchY && mTouchY < mPositionTop + imageHeight ) {
        MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.se073);
        mp.start();
        mLastTime   = System.currentTimeMillis();
    	int timer = 1;
		long now;
	    while (timer > 0) {
	    	now      = System.currentTimeMillis();
	    	if(now-mLastTime < MOVE_UNTIL){
	            move();
	            drawFrame();
	    	}else if(now-mLastTime >= MOVE_UNTIL){
	        	timer = 0;
	        	mp.stop();
	        	mp.reset();
	        	mp.release(); 
	        }
	    }
    }
    super.onTouchEvent(event);
}

蝉の座標と傾きはランダムで決めており、画面の外に飛び出しそうなときは反対方向に移動させています。

/*
 * 蝉アニメーション
 * */
public void move(){
    int jump = (int)Math.floor(Math.random()*5);
    jump *= SEMI_JUMP;
	int rand = (int)Math.floor(Math.random()*jump);
	int rand2 = (int)Math.floor(Math.random()*jump);
	int r = (int)Math.floor(Math.random()*180);
	int direct = ((rand % 2) == 0)?1:-1;
	int direct2 = ((rand2 % 2) == 0)?1:-1;
	if(mPositionLeft+rand*direct<=0 || (mPositionLeft+imageWidth)+rand*direct>=displayWidth){
		mPositionLeft = mPositionLeft+rand;
	}else{
		mPositionLeft = mPositionLeft+rand*direct;
	}
	if(mPositionTop+rand2*direct<=0 || (mPositionTop+imageHeight)+rand*direct>=displayHeight){
    		mPositionTop = mPositionTop+rand2;
	}else{
		mPositionTop = mPositionTop+rand2*direct2;
	}
	if(mPositionLeft <=0){
		mPositionLeft = mSemiSize;
	}else if(mPositionLeft+mSemiSize >= displayWidth){
		mPositionLeft = displayWidth-mSemiSize;
	}
	if(mPositionTop <=0){
		mPositionTop = mSemiSize;
	}else if(mPositionTop+mSemiSize >= displayHeight){
		mPositionTop = displayHeight-mSemiSize;
	}
	mPositionRotate = r;
}

キャンバス描画

キャンバスを使って画像を描画させます。
処理はシンプルで、変更した座標を引数に渡して、ただ描画をするだけです。

void drawSemi(Canvas c) {
    c.save();
    Rect src = new Rect(0, 0, mBGImage.getWidth(), mBGImage.getHeight());
    Rect dst = new Rect(0, 0, displayWidth, displayHeight);
    c.drawBitmap(mBGImage, src, dst, null);
    c.rotate(mPositionRotate,mPositionLeft+imageWidth/2,mPositionTop+imageHeight/2);  // 角度設定
    c.drawBitmap(mImage, mPositionLeft, mPositionTop, mPaint);
    c.restore();
}

座標や傾きを変更した上で一定時間毎に描画を繰り返すことで、蝉が動いているように見えます。

苦労話

蝉がぐるぐる回った時点で私が満足して作り込みを怠ったため、社内テストでは「(蝉が)画面から出てっちゃうんですけどー」との苦情が絶えませんでした。
「7年経ったらまた出てきます」と誤魔化したりもしましたが、修正したものを皆様にお届けできてよかったです。

裏話

蝉が動かないのに描画が繰り返されるのは無駄なので、タッチしてから一定時間だけ処理が行われるようにしています。
バッテリーの消費量に少なからず良い影響があるのではないかと期待しています。

蝉はデタラメに動いているだけですが、これはねーよという動きをしてくれました。動きを作るために必ずしも高度な技術が必要なわけではないと分かり、安心しました。



あなたにオススメの記事

この記事を共有する

  • このエントリーをはてなブックマークに追加

オススメ新着記事

Recommended by

スマホ情報のAndRockを共有する



follow us in feedly


アンドロイド携帯向けアプリの人気ランキングページです。ビジネスに、遊びに、とてもお役立ちのアンドロイドアプリが勢ぞろい。どのアプリも人気のある「10個」です。厳選されたラインナップ。もしかしたらあなたの携帯ライフを劇的に変えるアプリも現れるかもしれません!日々変わるこのアプリのランキング動向を、ぜひチェックしてください。




人気・定番のアンドロイドアプリレビュー

ぐるなび  レストラン情報・飲食店検索

ぐるなび  レストラン情報・飲食店検索

クーポンを使ってお得に食事しよう!

Sakenomy

Sakenomy

日本酒好きは絶対にインストールすべきアプリ




スマートフォン、アンドロイド、アプリの使い方を解説

LINE アプリの使い方 完全マニュアル(Android,iPhone)

6000万ダウンロードを突破した無料通話・チャットが使える神アプリLINEの使い方のまとめ


Viberの使い方、設定まとめ (Android , iPhone)

無料通話のできるViberの使い方から、初期設定、日本語化などなどのまとめ


Skypeの使い方、設定(Android , iPhone)

無料通話・無料チャットの定番Skypeの使い方まとめ


無料・おトク電話アプリ「050 plus」のまとめ

スマートフォンで月額を抑えたい人におススメのアプリ!「050 plus」の使い方を解説




ドラゴンボールZドッカンバトル攻略情報
ONE PIECE トレジャークルーズ攻略情報
LINE アプリの使い方 完全マニュアル(Android,iPhone)
インスタグラム完全使い方ガイド
iPhone説明書
LINEで絶対使いたいLINEスタンプ検索

アプリ人気ランキング

Androidアプリ
iPhone/iOSアプリ

新着スマホ情報


▼アプリ・記事の新着一覧へ

LINEで使えるオススメのスタンプアプリ まとめ20選

スマホアプリ カテゴリ一覧

スマートフォンサイト
QR-code AndRock(アンドロック)は、スマートフォンでもご利用いただけます。 QRコードスキャナーで読み取ってご利用ください。
Follow Us