5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは

Slides:



Advertisements
Similar presentations
5-7 音声の再生 (1)テキストスピーチ A. 手順 音声による英文のスピーチ ・ Android 1.6 以降の実機で可能。 ・ Android では英語であれば エミュレータで可能。それ以前は実機のみ。 ・機種によっては音声がインストールされていない場合があるので、 Android.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
8-4 Google マップの利用 1.地図を表示 ( エミュレータでも可能 ) Android API キーを取得しておくこと。 【 AndroidManifest.xml 】 ・・・
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
マルチスレッド処理 (II) Multithreading
創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 ac
Copyright by Rich & Giro
4月卒研報告              上藤紳也.
5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
Imageの描画 画像を読み込んで表示すること。 import java.awt.*;が必要。
Applet 岡部 祐典 鈴木 敬幸.
GPSはじめの第一歩 Android編 2009/03/28 山本 慎也.
5-3 図形の描画 (1)図形を表示する手順 ①実画面に表示するクラスを作成する。
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
8-2 センサ関係 1.センサの種類 種類センサの内容 TYPE_ACCELEROMETER 加速度センサ TYPE_MAGNETIC_FIELD 地磁気センサ TYPE_PROXIMITY 近接センサ TYPE_TEMPATURE 温度センサ TYPE_LIGHT 照明センサ TYPE_GRAVITY.
1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)
Iアプリプログラミング その1  鳥居秀徳.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JAVA.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
福盛 秀雄, 浜中 征志郎, 菅原 健一, 吉川 潤, 中山 周平 早稲田大学 村岡研究室
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
4.Eclipseの基本操作 4-1 Eclipseの起動
CONCURRENT PROGRAMMING
RMI ソフトウェア特論 第6回 /
プログラミング演習3 第2回 GUIの復習.
実行時のメモリ構造(2) Javaスタック内動作他
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
日本Androidの会 事務局長 SIPropプロジェクト 代表 グロースエクスパートナーズ 今村 謙之(いまむら のりつな)
第6回 2007年6月1日 応用Java (Java/XML).
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング演習3 第2回 GUIの復習.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
計算機プログラミングI 第12回 スレッド インターフェース 授業アンケート 計算機プログラミングI (増原) 2003年度.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
ソフトウェア制作論 平成30年11月28日.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
5-2 基本的なウィジェット (1)Toggle Button A. 配置
7.アプリケーションの連携 7-1 インテント(intent) 1.アプリケーションの連携とは
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
7-3 サービスの連携 1.サービスとは 画面を持たずに処理を行う【AndroidManifest.xmlへの追加】 …
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
5-5 文字列の描画 (1)基本的な文字列描画 A.手順
Presentation transcript:

5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは ③SurfaceViewは、より速く表示を更新できるよう設計されたViewのサブクラス。

B. SurfaceViewの使い方 ① SurfaceViewを利用するクラスでは、SurfaceViewを継承する。 ② SurfaceHolder.Callbackをimplementsする。  (サーフェースで表示更新に関する何らかの処理が発生すると、 コールバックとして用意したメソッドが呼び出される)   surfaceCreated : サーフェースが生成されたとき呼び出される。初期化処理等を行う。 surfaceChange : サーフェースが変更されたとき。 surfaceDestroyed : サーフェースが破棄されたとき。通常はスレッドをnullにする。

C. プログラム例(1) package jp.eclipse.surfaceView; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.Rect; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; public class SurfaceViewActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(new SurfaceViewView(this)); }

プログラム例(2) class SurfaceViewView extends SurfaceView implements SurfaceHolder.Callback, Runnable{ private SurfaceHolder holder; private Thread thread; private Bitmap image; private int sWidth=450, sHeight=750; private Rect src; private int px=240, py=400, vx=10, vy=10; public SurfaceViewView(Context context) { super(context); Resources res = getResources(); image = BitmapFactory.decodeResource(res, R.drawable.ball); int w = image.getWidth(); int h = image.getHeight(); src=new Rect(0,0,w,h); holder = getHolder(); holder.addCallback(this); holder.setFixedSize(sWidth + 20, sHeight + 20); }

D. 実行例 スレッドを用いたボールの動き。 ここではボール形状を 画像として用意している。 (Java 1.6で動かすこと)

(2)ScheduleExecutorServiceを使う A. ScheduleExecutorServiceとは 指定された遅延時間後または定期的に処理を実行できるようスケジューリングする。 取り消されるまで定期的に実行されるタスクを作成・実行するメソッドとして、  ①scheduleAtFixedRate メソッド  ②scheduleWithFixedDelay メソッド がある。 【例】1時間、10秒ごとにビープ音をならす。 mport static java.util.concurrent.TimeUnit.*; class BeepCon{ private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPoll(1); public void beepForHour(){ final Runnable b = new Runnnable(){ public void run(){ System.out.println("beep"); }; final ScheduledFuture<?> beepH = scheduler.scheduleAtFixedRate(b,10,10,SECONDS); schduler.schedule(new Runnable(){ public void run() {beepH.cancel(true);} }, 60*60. SECONDS); }

B. プログラム例(1) package jp.Scedule; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window;

プログラム例(2) public class SchedulledExecutorActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(new SurfaceViewView(this)); } class SurfaceViewView extends SurfaceView implements SurfaceHolder.Callback{ private SurfaceHolder holder=null; private Thread thread; float currentX, currentY, nextX, nextY; private int currentColor; public SurfaceViewView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initializeSurface(); public SurfaceViewView(Context context, AttributeSet attrs) { super(context, attrs);

プログラム例(3) public SurfaceViewView(Context context) { super(context); initializeSurface(); } private void initializeSurface() { currentColor=Color.WHITE; nextX=100; nextY=200; holder = this.getHolder(); holder.addCallback(this); public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {} public void surfaceCreated(SurfaceHolder arg0) { drawSurface();doAnimation(); public void surfaceDestroyed(SurfaceHolder arg0) {} public void drawSurface(){ Canvas c =holder.lockCanvas(); c.drawColor(Color.WHITE); Paint p=new Paint(); p.setColor(Color.RED); c.drawCircle(currentX, currentY, 50, p); holder.unlockCanvasAndPost(c);

プログラム例(4) public void doAnimation(){ ScheduledExecutorService executor =Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(new Runnable(){ public void run() { currentX -= (currentX - nextX)/20; currentY -= (currentY - nextY)/20; currentX = Math.abs(currentX)<1.0f ? 1.0f : currentX; currentY = Math.abs(currentY)<1.0f ? 1.0f : currentY; drawSurface(); } }, 0,100,TimeUnit.MILLISECONDS); public boolean onTouchEvent(MotionEvent event){ nextX=event.getX(); nextY=event.getY(); return true;

C. 実行例 スクリーンにタッチすると 赤い円がタッチしたところに 近づいてくる。 (Java 1.6で動かすこと)