• 締切済み

drawとonDrawの使い分け

public void draw(Canvas canvas) とpublic void onDraw(Canvas canvas) の違いは何でしょうか? 試しに二つ設定してみるとonDrawが呼ばれてからdrawが呼ばれます。 どういう使い分けなのでしょうか? 下記をgoogle翻訳して読みましたがいまいち解りませんでした。 https://stackoverflow.com/questions/13640541/view-ondrawcanvas-c-versus-drawcanvas-c-in-android どちらも自動的に呼ばれるようですが、どのような目的の違いがあるのでしょうか?

  • Java
  • 回答数11
  • ありがとう数0

みんなの回答

回答No.11

回答No.10 amanojaku1 >例えば「onDraw()」に時間のかかる描画処理が記述されていたとします (今時のインテル系CPUはFPU(浮動小数点ユニット)が標準装備ですが)スプライン曲線を描画する時などFPU(浮動小数点ユニット)が無かった時代では、スプライン曲線を描画するのに まさに亀のような遅さでした(ARM系のCPUもFPUとか入っているようです)。 Javaは一応どんなCPUでも対応できるような仕様なので、FPUが無いCPUでも一応使えますと言うのが売りなのでしょう(恐らく「draw()」、「onDraw()」は その辺りの対応策の結果なのでしょう)。

回答No.10

>「draw()の場合」:ビューを再描画する必要があるときにdraw()メソッドがフレームワークによって呼び出されます。 >「onDraw()の場合」:上記のメソッドを通じて各イベントが生じ間接的に、又は直接的に「onDraw()」が実行されます。 「View#forceLayout()」メソッドが実行され(LayoutにForceさせ)て各イベントが生じ間接的に「onDraw()」が実行されます、逆に言うと「View#forceLayout()」メソッドが実行され(LayoutにForceさせ)ても各イベントが生じなかったら「onDraw()」は実行されないと言うことかもしれません。 「View#requestLayout()」メソッドが実行されて各イベントが生じ間接的に「onDraw()」が実行されます、逆に言うと「View#requestLayout()」メソッドが実行されても各イベントが生じなかったら「onDraw()」は実行されないと言うことかもしれません。 例えば「onDraw()」に時間のかかる描画処理が記述されていたとします(10秒ぐらい)、 漢字入力でViewが見えたり隠れたりした場合に、再描画に10秒もかかっていたら操作が著しく困難になります。 恐らく「draw()」は保存されているCanvasバッファーのデータをレンダリング(View表示)するだけの機能である必要があるのだと思われます(機能的には「draw()」とレンダリング(View表示)は ほぼ同義のような感じ)。

回答No.9

>Logが出る順番は、onDrawそしてdrawです。 >onDrawの後にdrawになります。 >onDrawで一旦描画し終わり、改めて何かを再描画したいためにdrawを読んだということでしょうか? 確かに何か変ですね。 Android入門 アプリ開発の基本、レンダリング(図解) https://www.ecoop.net/memo/archives/android_lifecycle_of_view.html (上記「ビューのライフサイクル」からすると)下記メソッドを通じて各イベントが生じ間接的に「onDraw()」が実行されます、「View#invalidate()」だけは例外で直接的に「onDraw()」が実行されます。 「View#setContentView(int)」 「View#View(Content)」(Viewコンストラクターのnew:Viewインスタンスの生成) 「Inflater#inflate(int)」 「setContentView()、addView()」 「View#invalidate()」(無効化)はプログラマーが明示的に呼ぶメソッドかもしれません。 「View#forceLayout()」はLayoutにForceさせた時だと思われます。 「View#requestLayout()」は恐らくLayoutが状態(サイズや、位置)が変化した時だと思われます。 >ではどっちに描いても同じことじゃ? みたいな疑問がでてきますが長くなったのでこのへんで終わりにしようと思います。 良く分かりませんが何か違う可能性があります。 「draw()の場合」:ビューを再描画する必要があるときにdraw()メソッドがフレームワークによって呼び出されます。 「onDraw()の場合」:上記のメソッドを通じて各イベントが生じ間接的に、又は直接的に「onDraw()」が実行されます。

回答No.8

回答No.7 amanojaku1 ただ、不思議なのは下記の「ビューのライフサイクル」に「View#draw()」が出てこないと言う事です。 Android入門 アプリ開発の基本、レンダリング(図解) https://www.ecoop.net/memo/archives/android_lifecycle_of_view.html

回答No.7

回答No.6 amanojaku1 申し訳ございません。 >>draw(Canvas c)は、ビューがレンダリングされるときに自動的に呼び出されない関数です。 >ビューがレンダリング(描画)されるときにdraw(Canvas c)は呼び出されません、と言う意味だと思われます。 >つまり、onDraw(android.graphics.Canvas)でレンダリング(描画)されるときにdraw(Canvas c)は呼び出されません、と言う意味だと思われます。 ↑このレンダリングとは下記「Android入門 アプリ開発の基本、レンダリング(図解)」の「ビューのライフサイクル」の「View表示中」の事だと思われます(つまり、onDraw(android.graphics.Canvas)の後)。 つまり、onDraw(android.graphics.Canvas)の後でレンダリング(View表示中)のときにdraw(Canvas c)は呼び出されません、と言う意味だと思われます。 Android入門 アプリ開発の基本、レンダリング(図解) https://www.ecoop.net/memo/archives/android_lifecycle_of_view.html 「View#invalidate()」(無効化)はプログラマーが明示的に呼ぶメソッドかもしれません。 「View#forceLayout()」はLayoutにForceが移動した時だと思われます。 「View#requestLayout()」は恐らくLayoutが状態(サイズや、位置)が変化した時だと思われます。

takahasi5634
質問者

補足

回答ありがとうございます。 新規作成したプロジェクトにonDrawを追加しました。現在下記のようになっています @Override public void draw(Canvas canvas) { super.draw(canvas); Log.e("msg","draw"); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); Log.e("msg","onDraw"); } Logが出る順番は、onDrawそしてdrawです。 onDrawの後にdrawになります。 onDrawで一旦描画し終わり、改めて何かを再描画したいためにdrawを読んだということでしょうか? onDrawが描画で、drawが再描画と理解するとなんとなくつじつまが合う感じがしますが、 ではどっちに描いても同じことじゃ? みたいな疑問がでてきますが長くなったのでこのへんで終わりにしようと思います。 長らくありがとうございました。

回答No.6

>例えばAndroidStudioで新規プロジェクトを作成して、MainActivityに下記のようなインナークラスを追加して実行させます。activity_main.xmlのルートにandroid:id="@+id/top"を追加しました。その他は何もしていません。 >そうするとオーバーライドしたdrawに書いたLogが出力されます。このdrawはどこから呼ばれているのでしょうか? 申し訳ございません。 The draw() method is called by the framework when the view need to be re-drawn and the draw() method then calls the onDraw() to draw the view's content. draw()メソッドは、ビューを再描画する必要があるときにフレームワークによって呼び出され、draw()メソッドはonDraw()を呼び出してビューのコンテンツを描画します。 ↑ビューを再描画する必要があるときにdraw()メソッドがフレームワークによって呼び出されます。 >draw(Canvas c)は、ビューがレンダリングされるときに自動的に呼び出されない関数です。 ビューがレンダリング(描画)されるときにdraw(Canvas c)は呼び出されません、と言う意味だと思われます。 つまり、onDraw(android.graphics.Canvas)でレンダリング(描画)されるときにdraw(Canvas c)は呼び出されません、と言う意味だと思われます。

回答No.5

>Draw(Canvas c)は、このビュー(およびそのすべての子)を指定されたキャンバスに手動でレンダリングするために使用されます。これが解らないのですが、 >手動ということはオーバーライドして自分で描画処理を描くということではないのでしょうか?しかし、それはonDrawでやるのですよね? 手動ということはプログラマーがdraw(Canvas c)を直接呼べと言うことで、onDraw(Canvas c)をオーバーライドして描画処理を記述して下さい。 >あるライブラリをネットからダウンロードして解析しているのですが、FrameLayoutを継承したクラス、Viewを継承したクラスがあり、どちらもdrawをオーバーライドして描画処理をさせています。 それは仕様上やってはイケナイ プログラミングです。 >onDrawではありませんが、ちゃんと呼び出されています。どこにもdraw(canvas)のような呼び出しはありません。これは自動で呼び出されているわけではないのでしょうか? 「draw(Canvas c)は自動的に呼び出されない関数です」と明記されているのですから、そのライブラリからdraw(Canvas c)が呼ばれてませんか?

takahasi5634
質問者

補足

回答ありがとうございます。 例えばAndroidStudioで新規プロジェクトを作成して、MainActivityに下記のようなインナークラスを追加して実行させます。activity_main.xmlのルートにandroid:id="@+id/top"を追加しました。その他は何もしていません。 そうするとオーバーライドしたdrawに書いたLogが出力されます。このdrawはどこから呼ばれているのでしょうか? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TestView textView=new TestView(this); ViewGroup viewGroup=(ViewGroup)findViewById(R.id.top); viewGroup.addView(textView); } private static class TestView extends View { public TestView(Context context) { super(context); } @Override public void draw(Canvas canvas) { super.draw(canvas); Log.v("msg","draw"); } }

  • SPS700
  • ベストアンサー率46% (15295/33014)
回答No.4

 ##1です。補足です。 >>自動的に呼べるのは、 onDraw(Canvas canvas) の方だけということですが、下記のページではdrawも自動で呼ばれるようなやりとりになっていますが、これはどう解釈したらいいのでしょうか? https://stackoverflow.com/questions/13640541/view-ondrawcanvas-c-versus-drawcanvas-c-in-android  僕の答えは、ご質問の場所にある”Or in simple words draw(Canvas c) is simply a function that is not automatically called when the view is rendered.”  そうではないという意見はその下にあり、さらに  The draw() method is called by the framework when the view need to be re-drawn and the draw() method then calls the onDraw() to draw the view's content.  と述べられ「やり直し」の場合だとあります。

takahasi5634
質問者

補足

頭悪くてすいません。結局、違いが解りません。 "と述べられ「やり直し」の場合だとあります" 上記の言葉が何かを示唆していると思われるのですが、何を言おうとしているのか解りません。それはそもそもonDrawとdrawの差が解らないので、そのように言われても解らないのだと思います。 onDrawはAndroidシステムから自動で呼び出され何か自分で描画したい場合onDrawに描く。 ではdrawは?自動で呼び出されないと言っても、実際drawをオーバーライドすると自動で呼び出されています。 私は自動の意味を何か勘違いしているのでしょうか? 自動とは自分で作成したコードの中にdraw(canvas);のように描かなくても呼び出されるという解釈です。 その解釈が違うのでしょうか?

回答No.3

>回答No.2 amanojaku1 ざっくりと言うと draw(Canvas c)は自動的に呼び出されない関数です。 onDraw(Canvas c)はビューがレンダリングされるときに自動的に呼び出されます。 onDraw(Canvas c)内で描画処理を記述して下さい。

回答No.2

https://stackoverflow.com/questions/13640541/view-ondrawcanvas-c-versus-drawcanvas-c-in-android >The onDraw(Canvas c) is a override method and automatically called when the view is being rendered. Here you can do your additional drawing like make circles, lines or whatever you want. > >The draw(Canvas c) is used to manually render this view (and all of its children) to the given canvas. The view must have already done a full layout before this function is called. When implementing a view, implement onDraw(android.graphics.Canvas) instead of overriding this method. If you do need to override this method, call the superclass version. > >Or in simple words draw(Canvas c) is simply a function that is not automatically called when the view is rendered. User is needed to provide the canvas on which this view will rendered and user also have to do all the drawing on the canvas before calling this function. 下記は【Google 翻訳】ですが、少し編集してあります。 >onDraw(Canvas c)はオーバーライドメソッドであり、ビューがレンダリングされるときに自動的に呼び出されます。 ここでは、メークサークルや線などの追加図面を自由に作成できます。 > >Draw(Canvas c)は、このビュー(およびそのすべての子)を指定されたキャンバスに手動でレンダリングするために使用されます。 ビューは、この関数が呼び出される前に完全なレイアウトを既に完了している必要があります。 ビューを実装するときは、このメソッドをオーバーライドする代わりにonDraw(android.graphics.Canvas)を実装します。 このメソッドをオーバーライドする必要がある場合は、スーパークラスのバージョンを呼び出します。 > >または、単純な言葉でdraw(Canvas c)は、ビューがレンダリングされるときに自動的に呼び出されない関数です。 このビューをレンダリングするキャンバスを提供するにはユーザーが必要です。また、この関数を呼び出す前にキャンバス上のすべての描画を行う必要があります。 ざっくりと言うと、プログラマーが描画処理を記述する場合は、onDrawに記述しましょう、と言うことでしょう。 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas);←「このメソッドをオーバーライドする必要がある場合は、スーパークラスのバージョンを呼び出します」 ここに描画処理を記述する } Android入門 アプリ開発の基本、ビューのライフサイクル(図解) https://www.ecoop.net/memo/archives/android_lifecycle_of_view.html

takahasi5634
質問者

補足

Draw(Canvas c)は、このビュー(およびそのすべての子)を指定されたキャンバスに手動でレンダリングするために使用されます。これが解らないのですが、手動ということはオーバーライドして自分で描画処理を描くということではないのでしょうか?しかし、それはonDrawでやるのですよね? あるライブラリをネットからダウンロードして解析しているのですが、FrameLayoutを継承したクラス、Viewを継承したクラスがあり、どちらもdrawをオーバーライドして描画処理をさせています。onDrawではありませんが、ちゃんと呼び出されています。どこにもdraw(canvas)のような呼び出しはありません。これは自動で呼び出されているわけではないのでしょうか?

関連するQ&A

  • Androidアプリ EditText表示

    main.xmlにGUIで作成したEditTextを、Canvasクラスを通じて表示させる方法はあるのでしょうか? Canvasクラス内にfindViewByIdで読み出してくるよう記述しましたが、実行しても反映されず困っております。 protected void onDraw(Canvas canvas) { (ここに記述) } ちなみに、テキストの描写は問題無く反映できます。 canvas.drawText(text, 4, 0, paint); よろしくお願いいたします。

    • ベストアンサー
    • Java
  • アンドロイド JAVA 警告

    アンドロイド 初心者です package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new testView(this)); } class testView extends View { public testView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawLine(0, 0, 100, 50, paint); } } } このプラグラムで"Paint paint = new Paint();"のところで "Avoid object allocations during draw/layout operations (preallocate and reuse instead)" の警告が出ます、これを取る方法はありませんか。

    • ベストアンサー
    • Java
  • 画像の位置指定の数字を変えても、位置が変わりません! 何がいけないので

    画像の位置指定の数字を変えても、位置が変わりません! 何がいけないのでしょうか? package com.cute.yukari; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class cutecreate extends Activity { private SampleView mView; private Bitmap mBitmap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yukari1 ); mView = new SampleView(this); setContentView(mView); } private class SampleView extends View { private Paint mPaint; private float imageX = 0f; private float imageY = 0f; public SampleView(Context context) { super(context); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { //画像表示 canvas.drawBitmap(mBitmap, imageX - mBitmap.getWidth() / 50, ←ここの数字を変えても25以降位置が変わりません。 imageY - mBitmap.getHeight() / 50, ←25より少なくすると多少は移動するのですが… mPaint); } } }

    • ベストアンサー
    • Java
  • Androidアプリ開発

    Androidアプリを開発しているのですが、 エミュレータ、実機ともに実行するとプログラムが反映されておりません。 以下のソースを実行すると、 「Hello World!」のみ表示されます。 原因がわからないので、ご教授願えませんでしょうか。 【ソース】 package sib.stringex; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class StringEx extends Activity{ @Override public void onCreate(Bundle bundle){ super.onCreate(bundle); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new StringView(this)); } } package sib.stringex; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class StringView extends View { public StringView(Context context){ super(context); setBackgroundColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas){ Paint paint= new Paint(); paint.setAntiAlias(true); paint.setTextSize(24); paint.setColor(Color.rgb(0, 0, 0)); canvas.drawText("画面サイズ:"+ getWidth()+ "X"+getHeight(), 0, 60, paint); canvas.drawText("文字幅:"+(int)paint.measureText("A"), 0, 60*2, paint); canvas.drawText("アセント"+(int)paint.ascent(), 0, 60*3, paint); canvas.drawText("ディセント"+(int)paint.descent(), 0, 60*4, paint); paint.setTextSize(24); paint.setColor(Color.rgb(255, 0, 0)); canvas.drawText("24dot", 0, 60*5, paint); paint.setTextSize(32); paint.setColor(Color.rgb(0, 255, 0)); canvas.drawText("32dot", 0, 60*6, paint); paint.setTextSize(48); paint.setColor(Color.rgb(0, 0, 255)); canvas.drawText("32dot", 0, 60*7, paint); } }

  • MFC VC++ 6.0 使用 

    class patchmodel{ double a; double b; private: void Draw(); } void patchmodel::Draw(){ CDC DC; CDC* dc = GetDC(); dc->TextOut((int)a,(int)b,"HELLO"); ReleaseDC( dc ); } と 実行してみたところ エラーがでます。 error C2660: 'GetDC' : 関数が不正な 0 個の実引数をともなって呼び出されました。 error C2660: 'ReleaseDC' : 関数が不正な 1 個の実引数をともなって呼び出されました。 CModel::OnDraw(CDC* pDC) を あえて使わずに 実行したいので このように 簡単なもので 試して見たのですが、うまくいきません。 GetDC の使い方を まちがえているのでしょうか? お返事ください。

  • [android]画面に円が表示されない原因

    こんにちは。 以下のサイトを参考に白い画面に赤い円を表示させたいのですが、実際にはエミュレータ上に表示されません。 logcatのエラーもありません。原因と対処方法をご教授ください。 eclipseのバージョンは以下のとおりです。 Eclipse Platform 3.8.0.v20120607-071945-9gF7jI7nG5qByXMVdkhRMWBQlF4PnDCLybDCPQ http://www.hakkaku.net/articles/20091127-594 ★MainActivity.java package com.example.test001_001; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 描画クラスを設定 setContentView(new TestDrawView(getApplication())); } /* 描画用クラス */ class TestDrawView extends View { public TestDrawView(Context c) { super(c); } } // このメソッドで描画を行う protected void onDraw(Canvas c) { // --------- (*1)Check!! c.drawColor(Color.WHITE); Paint p = new Paint(); p.setColor(Color.RED); p.setStyle(Paint.Style.FILL); c.drawCircle(100, 100, 50, p); } }

  • iアプリの表示

    いま、簡単なアプリをつくろうと思い、以下のところまでできましたが、 Flashのモーショントウィーンみたいしたいのですが、前の表示の画像が消えないので、つながった画像表示になります。どうしたら前の画像表示が消えて、新しい表示のみにすることができるか?教えていただけたらと思います。docomoのiアプリです。  public class JavaGame extends IApplication { public void start(){ MyCanvas canvas = new MyCanvas(); Display.setCurrent(canvas); canvas.run(); terminate(); } } import com.nttdocomo.ui.*; public final class MyCanvas extends Canvas{ public final static int FPS = 30; // フレームレート public final static int INTERVAL = 1000 / FPS; // フレームの間隔 // --- 変数の定義 long lastTime = 0; // 前回のフレーム終了時間 // --- 変数の定義 Graphics grp = getGraphics(); // グラフィックの取得 MediaImage mi; Image img; int chx; int chy; void run(){ init(); while(true){ proc(); draw(); sleep(); } } void init(){ mi=MediaManager.getImage("resource:///0.gif"); try{ mi.use(); }catch(Exception e){ } img =mi.getImage(); } void proc(){ chy+=10; } void draw() { grp.lock(); int color =Graphics.getColorOfRGB(0,0,255); grp.setColor(color); grp.drawImage(img,chx,chy); grp.unlock(true); } // --- 休止 void sleep() { long wait = INTERVAL - (System.currentTimeMillis() - lastTime); if(wait > 0) { try { Thread.sleep(wait); } catch(Exception e) { } } lastTime = System.currentTimeMillis(); } public void paint(Graphics grp){ } }//class

  • JAVAのプリファレンスがうまくいかず困っています

    独学で勉強初めてまだ一ヶ月程度なのですがプリファレンスの扱いがうまくいかず困っています。 とりあえずアンドロイドアプリのシューティングゲームを作りながら判らなかったら調べつつ進めているので、根本的に間違っているかもですが御教授頂ければと思います。 ゲームのステータスをいじる画面をviewクラスで作り保存できるようにと思ったのですが、アクティビティでしかプリファレンスを扱えず無理やりやろうとしてこうなってしまいました。 ------------------------- public class SettingActivity extends Activity { int speed; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); //プリファレンスの準備 speed = pref.getInt("speed",1); //呼び出し 第二引数は初期値 LinearLayout l = new LinearLayout(this); l.setOrientation(LinearLayout.VERTICAL); setContentView(l); l.addView(new Setting(this)); } @Override protected void onPause() { SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); //プリファレンスの準備 Setting set = new Setting(this); Editor date = pref.edit(); date.putInt("speed",set.getSpeed()); date.commit(); //保存 super.onPause(); } -------------------------------- public class Setting extends View { SettingActivity activity = (SettingActivity)this.getContext(); int speed = activity.speed; void setSpeed(int sp) { speed = sp; } int getSpeed() { return speed; } public void onDraw(Canvas c) { super.onDraw(c); if(画面の表示が変わったとき) speed = 表示の値に; setSpeed(speed); } ----------------------------- 色々調べた結果このような感じになったのですが、どうしても最初の画面に戻ったら元に戻ってしまいます。 どのようにすればうまくいきますでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • package com.rensyu;コメントを入れて欲しいのですが…

    package com.rensyu;コメントを入れて欲しいのですが… import java.util.Calendar; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class rensyu extends Activity { Thread drawThread; class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { Bitmap osb; Canvas osc; public MySurfaceView(Context context) { super(context); getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d("TEST", "surfaceChanged"); } @Override public void surfaceCreated(final SurfaceHolder holder) { Log.d("TEST", "surfaceCreated"); final Paint paint = new Paint(); paint.setColor(Color.RED); paint.setAntiAlias(true); paint.setTextSize(24); final Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.icon); drawThread = new Thread() { public void run() { try { while (true) { Canvas canvas = holder.lockCanvas(); if (osb == null) { osb = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.RGB_565); osc = new Canvas(osb); } osc.drawColor(Color.WHITE); Calendar cal = Calendar.getInstance(); String s = String.format("%02d:%02d:%02d.%03d", cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND)); osc.drawText(s, 0, paint.getTextSize(), paint); osc.drawBitmap(bitmap, 0, paint.getTextSize(), null); canvas.drawBitmap(osb, 0, 0, null); holder.unlockCanvasAndPost(canvas); Thread.sleep(10); } } catch (Exception e) { } } }; drawThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d("TEST", "surfaceDestroyed"); } }

    • ベストアンサー
    • Java
  • グーグルアースとグーグルマップの違いは?

    現在の状態: グーグルアースを使うには、ダウンロードが必要だと聞いたので 「グーグルアース」ダウンロードと云うのをクリックしました (ディスクトップにシンボルアイコンがでましたので、これは成功したとおもいます。 「グーグルマップ」については、検索しただけで出ます (どうしてこちらはダウンロードの必要ないのかもちょっと疑問です) 両方とも、使い方をよく解らないまま、やってみました(ストリートビューまで) 使い方によって違いがでてるのか、機能がちがうのか うまく把握できず、知識の整理が 出来ません。 質問です。 (1)グーグルアースにおいては、実写とストリートビューが出来ましたが、地図がでないように感じます が、正しい判断でしょうか?(グーグルマップでは地図が出ました) (2)グーグルアースで外国においては、ストリートビューが見られないように感じますが 正しい判断ですか? つぎはお願いです。 (1)両方の使い分けが解る(両方の違いが解る)文献のご紹介をお願いいたします。 (2)これはできればのお願いですが、地図表示時代~ストリートビュー時代までの発展の経過などの 資料があれば、なお、うれしいです(池上先生流に教わると理解が深まるような気がします。ぜいたく なお願いですね)  よろしくお願いいたします。 ビスタ・2007です。

専門家に質問してみよう