テクパー2020 テクニカルヘルパー |
アンドロイドアプリ開発 |
◆ 画像(イメージ)のスライド描画 ・ 画像(イメージ)をスライドしながら描画します |
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() |
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) |
Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved. |