|
テクパー2020 テクニカルヘルパー |
アンドロイドアプリ開発 |
|
◆ 画像(イメージ)のスライド描画 ・ 画像(イメージ)をスライドしながら描画します |
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() |
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. |