テクパー2020
テクニカルヘルパー


 アンドロイドアプリ開発 

◆ 画像(イメージ)のスライド描画
・ 画像(イメージ)をスライドしながら描画します

1.新規プロジェクトで 「 ImageSlide 」 を新規に作成します

1)ファイル(F) → 新規(N) → プロジェクト(P)

2)Android の Android プロジェクト を選択し、[次へ(N)]ボタン をクリック
・プロジェクト名に 「 Image 」 を入力
・ビルド・ターゲットの □ Android 2.2 を チェック (最新のバージョン)
・アプリケーション名に 「 ImageSlide 」 を入力
・パッケージ名に 「 任意のドメイン名 」 を入力 (ドメイン名をパッケージ名に利用)
・□ Create Activityがチェック状態で、名称に 「 ImageSlide 」 を入力
・[完了]ボタン をクリック

2.Viewクラス 「 ImageSlideView 」 を新規に作成します

1)srcのパッケージ上で右クリック → 新規(W) → クラス
・名前(M)に 「 ImageSlideView 」 を入力
・スーパークラス(S)に 「 android.view.View 」 を入力
・[完了]ボタン をクリック

3.画像(イメージ)を配置します

1)resのフォルダー上で右クリック → 新規(W) → フォルダー
・フォルダー名(N)に 「 drawable 」 を入力
・[完了]ボタン をクリック

2)作成した drawable のフォルダー上で右クリック → インポート
・一般 → ファイル・システム
・[次へ]ボタン をクリック
・次のディレクトリーから(Y)に画像(イメージ)があるフォルダーを指定 (参照ボタンで指定)
・取得する画像(イメージ)をチェック
・[完了]ボタン をクリック

(プロジェクトの構成)


4.生成された 「 ImageSlideView 」 を書き換え
package com.proto.imageslide;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class ImageSlideView extends SurfaceView
                            implements SurfaceHolder.Callback,Runnable {

    private SurfaceHolder holder;	// サーフェイスホルダー
    private Thread thread;		// スレッド

    private Paint paint;		// ペイント
    private Canvas canvas;		// キャンパス

    private Bitmap images;		// 画像(イメージ)
    private int px=0; 		        // X座標
    private int py=0; 		        // Y座標
    private int vx=10;		        // X速度
    private int vy=10;		        // Y速度

    private int cnt=0; 		        // カウント

    // コンストラクタ
    public ImageSlideView(Context context) {
        super(context);

        // 画像(イメージ)の指定
        Resources r=context.getResources();
        images=BitmapFactory.decodeResource(r,R.drawable.site_guide);

        // サーフェイスホルダーの生成
        holder=getHolder();
        holder.addCallback(this);
        holder.setFixedSize(getWidth(),getHeight());

        // ペイントの生成
        paint=new Paint(); 
        paint.setAntiAlias(true);	  // 文字の縁を滑らかに描く
        paint.setTextSize(18);		  // 文字サイズ
        paint.setColor(Color.MAGENTA);	  // 文字色

    }

    // サーフェイスの生成
    public void surfaceCreated(SurfaceHolder holder) {
        thread=new Thread(this);
        thread.start();
    }

    // サーフェイスの終了
    public void surfaceDestroyed(SurfaceHolder holder) {
        thread=null;
    }

    // サーフェイスの変更
    public void surfaceChanged(SurfaceHolder holder, int format,int w,int h) {
    }

    // スレッドの処理
    public void run() {

        while(thread!=null) {

            int imgW=images.getWidth();	     // 画像(イメージ)幅
            int imgH=images.getHeight();     // 画像(イメージ)高さ

            // ロック
            canvas=holder.lockCanvas();

            // 背景色の指定 (android.graphics.Colorの定義)
            canvas.drawColor(Color.CYAN);

            ++cnt;
            canvas.drawText("画像(イメージ)のスライド描画 "+cnt,0,20,paint);
            canvas.drawText("サイズ: 幅="+imgW+", 高さ="+imgH,0,40,paint);
            canvas.drawText("座標: X="+px+", Y="+py,0,60,paint);
            canvas.drawText("速度: X="+vx+", Y="+vy,0,80,paint);

            // 画像(イメージ)のスライド描画
            canvas.drawBitmap(images,px,py,null);

            // アンロック
            holder.unlockCanvasAndPost(canvas);

            // 描画座標のスライド
            if (px<-imgW || getWidth()
          


5.「 ImageSlide 」 を書き換え
package com.proto.imageslide;

import android.app.Activity;
import android.os.Bundle;
import android.graphics.PixelFormat;
//import android.view.Window;

public class ImageSlide extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // ウィンドウタイトルの非表示 
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // ウィンドウの表示形式
           (OPAQUE:不透明,TRANSLUCENT:半透明,TRANSPARENT:透過)
        getWindow().setFormat(PixelFormat.TRANSLUCENT);

        // setContentView(R.layout.main);書き換え
        setContentView(new ImageSlideView(this));
    }
}


・機能の説明
public class ImageSlideView extends SurfaceView
                            implements SurfaceHolder.Callback,Runnable {

implements SurfaceHolder.Callback,Runnable の追加
android.app.Activity  のActivityクラスでウィンドウの取得

// アクティビティの現在ウィンドウの取得(ウィンドウAPIにアクセス)
public Window getWindow () 
android.view.Window  のWindowクラスでウィンドウ形式の指定

// ウィンドウ形式の指定(PixelFormatでの値)
public void setFormat (int format) 
android.graphics.PixelFormat  のPixelFormatクラスのコンスタント

OPAQUE      : システムが不透明な形式
TRANSLUCENT : システムが半透明をサポートする形式
TRANSPARENT : システムが透過性をサポートする形式
android.view.SurfaceView  のSurfaceViewクラスの生成

// サーフェイスホルダー の取得
public SurfaceHolder getHolder () 
android.view.SSurfaceHolder  のSurfaceHolderの生成

// コールバックインターフェイスの追加(コールバックインターフェイス)
public abstract void addCallback (SurfaceHolder.Callback callback) 

// ウィンドウの固定サイズの指定(ウィンドウの幅,ウィンドウの高さ)
public abstract void setFixedSize (int width, int height) 
android.view.SurfaceHolder.Callback  の実装

// サーフェイスホルダー 生成時の処理(サーフェイスホルダー)
public abstract void surfaceCreated (SurfaceHolder holder) 

// サーフェイスホルダー 破棄(終了)時の処理(サーフェイスホルダー)
public abstract void surfaceDestroyed (SurfaceHolder holder) 

// サーフェイスホルダー 変更(形式やサイズ)時の処理
   (サーフェイスホルダー,新しいPixelFormat,新しい幅,新しい高さ)
public abstract void surfaceChanged (SurfaceHolder holder, int format, int width, int height) 


6.プロジェクトの実行(実行構成の作成は、「プロジェクトの新規作成」を参照)
1)実行(R) → 実行(R)
(画像イメージをスライド描画する)


Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved.