AndroidSDK
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
DoJaなんかだとCanvasとかIApplicationをRunnableにしてメインループをそこにおいて描画なんてのをやるんだけど、IApplication=Activity Canvas=Viewで同じことやろうとすると上のメッセージがでる。どうもこういうことらしい
http://code.google.com/android/reference/android/view/View.html The basic cycle of a view is as follows: An event comes in and is dispatched to the appropriate view. The view handles the event and notifies any listeners. If in the course of processing the event, the view's bounds may need to be changed, the view will call requestLayout(). Similarly, if in the course of processing the event the view's appearance may need to be changed, the view will call invalidate(). If either requestLayout() or invalidate() were called, the framework will take care of measuring, laying out, and drawing the tree as appropriate. Note: The entire view tree is single threaded. You must always be on the UI thread when calling any method on any view. If you are doing work on other threads and want to update the state of a view from that thread, you should use a Handler. こちらも同様のアドヴァイスが。いちはやくDoJaから(?)の移植をしておられる。 http://castor.s26.xrea.com/blog/2007/11/17 PR
無数のボールが跳ね回るアプレットのソースが公開されているので、そちらの移植を乱暴にやりつつ、泥縄式におぼえていきたい。
http://homepage.mac.com/catincat/java/physics/mass/ http://homepage.mac.com/catincat/java/physics/mass/MassiveBall.java まず Applet = View Color = 存在しないので新しく作る Graphics = Canvas Image = Bitmap という感じで置き換えて乱暴にコードを削った。 マウス処理はちょっと後回しにしておいて repaint() = invalidate() Graphics.setcolor() = Paint.setARGB() とかやった もとのアプレットはメイン処理をデーモンスレッドで走らせててそこでrepaintしていたが、同じ様にやると Only the original thread that created a view hierarchy can touch its views といって怒られた。とりあえず早い所結果が見たいので http://code.google.com/android/samples/ApiDemos/src/com/google/android/samples/graphics/GLView1.html ここのメッセージハンドラの処理を見て、スレッドじゃなくタイマー処理で再描画を呼び出すことにした。 ものすごーくラフで、いろいろ整理してないけどとりあえずボールが沢山出て動く、ってところまでいけたのがこれ。 sample source
The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing). http://code.google.com/android/reference/android/graphics/Canvas.html WindowsAPIの描画の感じににてるのかな。 The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
次に試してみたのがカラーキューブ
http://code.google.com/android/samples/ApiDemos/src/com/google/android/samples/graphics/GLView1.html OpenGLが使える模様。 アニメーションのためのタイマー処理はは以下のハンドラがやってくれている。 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (mAnimate && msg.what == INVALIDATE) { invalidate(); msg = obtainMessage(INVALIDATE); long current = SystemClock.uptimeMillis(); if (mNextTime < current) { mNextTime = current + 20; } sendMessageAtTime(msg, mNextTime); mNextTime += 20; } } }; protected void onAttachedToWindow() { mAnimate = true; Message msg = mHandler.obtainMessage(INVALIDATE); mNextTime = SystemClock.uptimeMillis(); mHandler.sendMessageAtTime(msg, mNextTime); super.onAttachedToWindow(); } なんかこのての処理既視感があるな。COCOAってこんなんじゃなかったっけ。それ以前にJavaのなにがしかでもこういうのあんのかな。まあいいや慣れだ慣れ。 役にたつかもしれないからメッセージとハンドラにリンクはっとこう http://code.google.com/android/reference/android/os/Message.html http://code.google.com/android/reference/android/os/Handler.html Windowsのエミュレータが動かないのは原因が分からん。Linuxも検証まだ。明日はデバッガまわりをいじる予定。 お絵描きソフト http://code.google.com/android/samples/ApiDemos/src/com/google/android/samples/graphics/TouchPaint.html これによると、押す強さと押した範囲がとれるようだ。(実装依存というやつだが)。 残念ながらエミュレータではとれないみたいだけど、ソースはこんな感じになってる public boolean onMotionEvent(MotionEvent event) { int action = event.getAction(); mCurDown = action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE; mCurX = (int)event.getX(); mCurY = (int)event.getY(); mCurPressure = event.getPressure(); mCurSize = event.getSize(); mCurWidth = (int)(mCurSize*(getWidth()/3)); if (mCurWidth < 1) mCurWidth = 1; if (mCurDown && mBitmap != null) { int pressureLevel = (int)(mCurPressure*255); mPaint.setARGB(pressureLevel, 255, 255, 255); mCanvas.drawCircle(mCurX, mCurY, mCurWidth, mPaint); mRect.set(mCurX-mCurWidth-2, mCurY-mCurWidth-2, mCurX+mCurWidth+2, mCurY+mCurWidth+2); invalidate(mRect); } return true; } リファレンス見てもとれそうな感じで書いてある。 http://code.google.com/android/reference/android/view/MotionEvent.html#getPressure() 押したサイズもとれるようにはなっている http://code.google.com/android/reference/android/view/MotionEvent.html#getSize() ここらへんは実際の端末で対応するかどうかだから、別途public final long getDownTime()とかで書く必要もあるんだろうな さあリンク集だ キーパッドからの入力に応じて画面上のボールが動く http://rio1218.blog26.fc2.com/blog-entry-33.html http://rio1218.blog26.fc2.com/blog-entry-34.html 任意のビューをアラートダイアログに表示 http://www.javadrive.jp/android/alertdialog/index5.html メインループとキー情報がとれて三角形が動く http://castor.s26.xrea.com/blog/tech/android http://castor.s26.xrea.com/blog/2007/11/17 ボタンクリック時の処理を設定したアラートダイアログを表示 http://www.javadrive.jp/android/alertdialog/index3.html ImageButton?を作る http://d.hatena.ne.jp/s_welt/20071114 地図アプリ http://www.atmarkit.co.jp/fjava/column/koyama/koyama09_5.html AndroidのOpenGL ESでのマウスピッキング http://chephes.cocolog-nifty.com/blog/android/index.html ContentProvider? を使って コンタクトリストのデータを取得する http://www.plants-web.jp/flashmind/blog/2007/11/android_contentprovider.html Android SDKとOpenGL Message/Handlerさわり http://androidsdk.blog.shinobi.jp/Entry/3/ Androidアプリでクロック機能を実装するためのヒント http://kousei-inc.com/portal/index.php?%E5%8B%9D%E6%89%8B%E3%81%ABAndroid%E3%83%96%E3%83%AD%E3%82%B0 チャット形式で様々な事にトライ 必見 http://www.lingr.com/room/Androider-ja/archives/2007/11/23 AndroidでTwitterクライアント http://www.adamrocker.com/blog/173/android_twitter_client.html AndroidでWebページサムネイル http://chephes.cocolog-nifty.com/blog/2007/11/androidweb_476f.html Bug LabsのモジュラーなデバイスでGoogleのAndroidが走るらしい http://blog.browncat.org/2007/11/bug_labsgoogleandroid.html 動画ファイル再生 http://kazhik.net/tech/2007/12/android-1.html ダイヤラ http://sadko.mobi/callfreq/index.html RSSリーダ http://code.google.com/p/android-feed-reader/ ブロック崩し http://chephes.cocolog-nifty.com/blog/2007/11/android_07e5.html リンク紹介系 RSS系 手取り足取り教える系 日本語翻訳系 素人悩みながら始めてる系 日記とか |
カレンダー
フリーエリア
最新コメント
[12/11 Bexclance]
[11/20 unostubbanuag]
[11/19 SireeAgribe]
[11/19 Keeseerooma]
[11/19 MaloBeednen]
最新記事
(01/08)
(12/07)
(12/01)
(11/23)
(11/20)
最新トラックバック
プロフィール
HN:
No Name Ninja
性別:
非公開
ブログ内検索
最古記事
(11/13)
(11/14)
(11/14)
(11/15)
(11/16) |