5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加

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(
8-4 Google マップの利用 1.地図を表示 ( エミュレータでも可能 ) Android API キーを取得しておくこと。 【 AndroidManifest.xml 】 ・・・
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
         第9回 Swing.
創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 ac
HTML 5の表現力 楽しいアプリ制作の会 TWorks 蜜葉.
Copyright by Rich & Giro
4月卒研報告              上藤紳也.
Android:Service 小山 圭.
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
デスクトップを画像として保存する(1) ① デスクトップの画像をクリップボードへコピーする。
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.
Flash PANORAMA Powered by Papervision3D
プログラミング演習3 第4回 ミニプロジェクト.
デスクトップを画像として保存する(1) ① デスクトップの画像をクリップボードへコピーする。
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
CGプログラミング論 平成28年4月27日 森田 彦.
オブジェクト指向入門.
4.Eclipseの基本操作 4-1 Eclipseの起動
プログラミング演習3 第2回 GUIの復習.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑨ JAVAのSwingのメニュー処理
プログラミング演習3 第3回 ミニプロジェクト.
日本Androidの会 事務局長 SIPropプロジェクト 代表 グロースエクスパートナーズ 今村 謙之(いまむら のりつな)
プログラミング演習3 第3回 ミニプロジェクト.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング演習3 第2回 GUIの復習.
デジタル画像とC言語.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
ソフトウェア制作論 平成30年11月21日.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
JAVA入門後期④ イベント、AWT、の基本構造、スレッド
計算機プログラミングI 第12回 スレッド インターフェース 授業アンケート 計算機プログラミングI (増原) 2003年度.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
ここにタイトルを入力 ここにサブタイトルを入力 草原 (初級)
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
ソフトウェア制作論 平成30年11月28日.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
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-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
5-5 文字列の描画 (1)基本的な文字列描画 A.手順
Presentation transcript:

5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加 5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加 ②リソースを指定してビットマップを取得。 ③イメージビューを作成して、イメージビューにビットマップを指定 ここでは2つの画像を組み込む。 【例】 // ビットマップの取得 bmp[0] = BitmapFactory.decodeResource(getResources(),R.drawable.bird1); bmp[1] = BitmapFactory.decodeResource(getResources(),R.drawable.bird2); for(int i=0; i<iv.length;i++){ iv[i] = new ImageView(this); // イメージビューを作成 iv[i].setImageBitmap(bmp[i]); // イメージビューにビットマップを指定 LL.addView(iv[i]); // レイアウトにイメージビューを追加 } // LLは LinearLayout

B. 関連するクラス 【android.graphic.BitmapFactory クラス】 Bitmap decodeResource 指定したリソース、IDからビットマップ (Resource rs, int id) オブジェクトを作成。 【android.content.ContextWrapper クラス】 Resources getResource() リソースを取得。 【android.view.ImageView クラス】 ImageView(Context c) 指定したコンテキストでイメージビューを作成。 Void setImageBitmap(Bitmap bmp) ビットマップオブジェクトを設定。

C. プログラム例 package jp.eclipse.image; import android.app.Activity; import android.os.Bundle; import android.graphics.*; import android.view.*; import android.widget.*; public class MultiImageDTActivity extends Activity { /** Called when the activity is first created. */ Bitmap[] bmp = new Bitmap[2]; ImageView[] image = new ImageView[2]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL=new LinearLayout(this); LL.setOrientation(LinearLayout.HORIZONTAL); LL.setGravity(Gravity.CENTER); setContentView(LL); bmp[0]=BitmapFactory.decodeResource(getResources(), R.drawable.bird1); bmp[1]=BitmapFactory.decodeResource(getResources(), R.drawable.bird2); for(int i=0;i<image.length;i++) { image[i]=new ImageView(this); image[i].setImageBitmap(bmp[i]); LL.addView(image[i]); } C. プログラム例 【注】 あらかじめdrawable-hdpi に 2画像をコピーしておくこと。 ここでは、bird1.gif, bird2.gif を コピーした例を示す。

2つの画像が表示されている。(Java 1.6で動かすこと) D. 実行例

(2)イメージ画像の切り替え A.手順 複数の画像をビュー上で切り替えることで、絵が動いているようにみえる。 (前出(1)を変更して作成) ① ActivityにRunnable を実装 ② 「ボールの移動」と同様、Run を一定時間遅延させて実行する。

B. プログラム例(1) package jp.eclipse.anime; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.content.*; import android.graphics.*; import android.view.*; // Runnable を実装 public class Anime01Activity extends Activity implements Runnable { /** Called when the activity is first created. */ AnimationView v; Handler h; Bitmap[] bmp=new Bitmap[2]; float x, y; int nid; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); bmp[0]=BitmapFactory.decodeResource(c.getResources(), R.drawable.bird1); bmp[1]=BitmapFactory.decodeResource(c.getResources(), R.drawable.bird2); requestWindowFeature(Window.FEATURE_NO_TITLE); v=new AnimationView(this); setContentView(v); h = new Handler(); h.postDelayed(this,10); } 【注】 あらかじめdrawable-hdpi に 2画像をコピーしておくこと。 ここでは、bird1.gif, bird2.gif を コピーした例を示す。

プログラム例(2) public void run(){ nid = 1 - nid; v.invalidate(); h.postDelayed(this,10); } public void onDestroy(){ super.onDestroy(); h.removeCallbacks(this); class AnimationView extends View{ public AnimationView(Context c) { super(c); nid=0; x=100; y=100; protected void onDraw(Canvas c){ super.onDraw(c); setBackgroundColor(Color.WHITE); c.drawBitmap(bmp[nid], x, y, null);

C. 実行例 2つの画像が交互に表示されるので、 鳥が羽ばたいているように見える。 (Java 1.6で動かすこと)

(3)背景画像と画像の移動 A.手順 前出(2)を変更して作成 ① 鳥の画像の他に背景画像ファイルをリソースに追加 ① 鳥の画像の他に背景画像ファイルをリソースに追加 ② 1回ごとにX座標を減ずる。負になったら右端のX座標に移す。 ③ 背景と鳥を描画する。

B. 関連するクラス 【android.graphic.Canvas クラス】 int getWidth() キャンバスの幅 int getHeight() キャンバスの高さ void drawBitmap(Bitmap b, ビットマップの部分的な描画 Rect src, Rect dst, Paint p)   src : ビットマップ側の範囲  dst : キャンバス側の範囲

C. プログラム例(1) package jp.eclipse.anime02; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.content.*; import android.graphics.*; import android.view.*; // Runnable を実装 public class Anime02Activity extends Activity implements Runnable{ /** Called when the activity is first created. */ AnimationView v; Handler h; Bitmap[] bmp=new Bitmap[2];Bitmap backBmp; float x, y, dx; int nid; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); bmp[0]=BitmapFactory.decodeResource(c.getResources(), R.drawable.bird1); bmp[1]=BitmapFactory.decodeResource(c.getResources(), R.drawable.bird2); backBmp=BitmapFactory.decodeResource(c.getResources(), R.drawable.backsample); requestWindowFeature(Window.FEATURE_NO_TITLE); v=new AnimationView(this); setContentView(v); h = new Handler(); h.postDelayed(this,10); }

プログラム例(2) public void run(){ nid = 1 - nid; x += dx; v.invalidate(); h.postDelayed(this,10); } public void onDestroy(){ super.onDestroy(); h.removeCallbacks(this); class AnimationView extends View{ public AnimationView(Context c) { super(c); nid=0; x=300; y=100; dx=-10; protected void onDraw(Canvas c){ super.onDraw(c); int wd = c.getWidth(); int hd = c.getHeight(); Rect dst = new Rect(0,0,wd,hd); int ws = backBmp.getWidth(); int hs = backBmp.getHeight(); Rect src=new Rect(0,0,ws,hs); c.drawBitmap(backBmp, src, dst, null); // 背景画像表示 if(x<0) x = wd; c.drawBitmap(bmp[nid], x, y, null); // 鳥の画像表示

鳥が背景画像の前を羽ばたきながら左方向に移動する。 (Java 1.6で動かすこと) D. 実行例

(4)画像の回転 A.手順 元の画像 回転した結果の 画像範囲 回転した結果 マトリックスで変換行列を指定する ① 回転する画像と静止する画像(動きの相対関係を明確にするため)をリソースに追加 ② 変換行列に回転を指定する。 ③ 回転したビットマップを作成する。 ④ 回転した図形を描画する。なお、回転した結果は元の画像より大きくなるので、   描画開始位置を調整する。 元の画像 回転した結果の 画像範囲 回転した結果

B. 関連するクラス 【android.graphic.Matrix クラス】 boolean postRotate(int a) 指定した角度(度:Degree)を設定する。 【android.graphic.BitmapFactory クラス】 Bitmap createBitmap(Bitmap bmp, 指定したビットマップ、X座標位置、Y座標 int x, int y, int w, int h, 位置、幅、高さのビットマップオブジェク Matrix m, boolean filter) トを変換行列 m を用いて生成する。

C. プログラム例(1) package jp.eclipse.animation; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.content.*; import android.graphics.*; import android.view.*; // Runnableを実装 public class Anime03Activity extends Activity implements Runnable { /** Called when the activity is first created. */ AnimationView v; Handler h; Bitmap bmp1, bmp2; Matrix m; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); bmp1=BitmapFactory.decodeResource(this.getResources(), R.drawable.fan1); bmp2=BitmapFactory.decodeResource(this.getResources(), R.drawable.fan2); m=new Matrix(); v=new AnimationView(this); setContentView(v); h = new Handler(); h.postDelayed(this,10); }

プログラム例(2) public void run(){ m.postRotate(10); v.invalidate(); h.postDelayed(this,10); } public void onDestroy(){ super.onDestroy(); h.removeCallbacks(this); class AnimationView extends View{ public AnimationView(Context c) { super(c); protected void onDraw(Canvas c){ super.onDraw(c); setBackgroundColor(Color.WHITE); c.drawBitmap(bmp2,180, 80, null); Bitmap tmp = Bitmap.createBitmap(bmp1,0, 0, bmp1.getWidth(), bmp1.getHeight(), m, true);   // 回転画像で大きくなった分だけ移動する。 float f=(tmp.getWidth()-bmp1.getWidth())/2; c.drawBitmap(tmp,200-f,100-f, null);

ファンの形だけが回転している。 (Java 1.6で動かすこと) D. 実行例

(4)画像の拡大・縮小 A.手順 ソースとディスティネーションの矩形を指定する方法でも可能だが ここではマトリックスで拡大・縮小を行う方法について示す。 ① 拡大・縮小する画像をリソースに追加 ② 変換行列にスケールを指定する。 ③ 拡大・縮小したビットマップを作成する。 ④ 描画する。

B. 関連するクラス 【android.graphic.Matrix クラス】 void postScale 指定した角度を設定する。 (float sx, float sy) sx : X方向スケール sy : Y方向スケール 【android.graphic.BitmapFactory クラス】 Bitmap createBitmap(Bitmap bmp, 指定したビットマップ、X座標位置、Y座標 int x, int y, int w, int h, 位置、幅、高さのビットマップオブジェク Matrix m, boolean filter) トを変換行列 m を用いて生成する。

C. プログラム例(1) package jp.eclipse.scale; import android.app.*; import android.os.Bundle; import android.graphics.*; import android.view.*; import android.view.View.OnClickListener; import android.view.View.*; import android.widget.*; public class ScaleActivity extends Activity { /** Called when the activity is first created. */ ImageView img; Button b1,b2,b3; Bitmap bmp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL=new LinearLayout(this); LL.setOrientation(LinearLayout.HORIZONTAL); setContentView(LL);

プログラム例(2) b1=new Button(this); b1.setText("通常");LL.addView(b1); bmp=BitmapFactory.decodeResource(getResources(), R.drawable.bird1); img=new ImageView(this); img.setImageBitmap(bmp); LL.addView(img); b1.setOnClickListener(new b1ClickListener()); b2.setOnClickListener(new b2ClickListener()); b3.setOnClickListener(new b3ClickListener()); }

プログラム例(3) class b1ClickListener implements OnClickListener{ public void onClick(View v){clickProc(1.0F,1.0F);} } class b2ClickListener implements OnClickListener{ public void onClick(View v){clickProc(2.0F,2.0F);} class b3ClickListener implements OnClickListener{ public void onClick(View v){clickProc(0.5F,0.5F);} public void clickProc(float sx, float sy){ Matrix m=new Matrix(); m.postScale(sx,sy); Bitmap bmp2=Bitmap.createBitmap(bmp,0,0, bmp.getWidth(),bmp.getHeight(),m,true); img.setImageBitmap(bmp2);

D. 実行例 「拡大」「縮小」ボタンをクリック すると拡大・縮小される (Java 1.6で動かすこと)

(5)クリッピング(キャンバスのくりぬき) A.手順 ① 複合図形(Path)を指定する ② Pathをクリッピング(Clipping)する(くりぬき) ③ キャンバスにビットマップを描画する。

B. 関連するクラス 【android.graphic.Canvas クラス】 void clipPath(Path p) パスをクリッピングする。 P : pathインスタンス その他(Canvasクラス)  void clipRect(Rect/RectF r)  void clipRect(int/float x1, int/float y1, int/float x2, int/float y2)

C. プログラム例(1) package jp.eclipse.Clip; import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.content.res.Resources; import android.graphics.*; import android.util.AttributeSet; import android.view.*; import android.widget.*; public class ClippingActivity extends Activity { /** Called when the activity is first created. */ Bitmap bmp=null; myView mv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL= new LinearLayout(this); LL.setOrientation(LinearLayout.HORIZONTAL); LL.setGravity(Gravity.CENTER); setContentView(LL);

プログラム例(2) bmp= BitmapFactory.decodeResource(getResources(), R.drawable.backsample); mv=new myView(this); LL.addView(mv); } class myView extends View{ public myView(Context context) { super(context); protected void onDraw(Canvas c){ super.onDraw(c); c.drawColor(Color.WHITE); Path path =new Path(); path.addCircle(250,250, 100, Path.Direction.CW); path.addRect(100, 300, 400, 700, Path.Direction.CW); c.clipPath(path); Paint paint=new Paint(); c.drawBitmap(bmp,20,20,paint);

D. 実行例 クリッピング している様子