× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
インテントを使ってYouTubeアプリを起動するだけ。
youtubeIdは動画ID。URLに含まれているもの。 インテントが無いときは、PlayストアのYouTubeアプリのページに飛ばしたりするとよいかと思われる PR |
Androidはiosと比べてスレッドに気をつけて実装する必要がある。
描画処理をメインスレッドで実行するとすぐ落ちる。 runOnUiThread()とは仲良くなっておこう。
cocos2d-xを使っている場合 cocos2d-xの処理は、できるだけメインループである
から呼び出される中で実行した方が良い。 といっても、普通に実装していれば大抵はこの中から呼び出される。 JavaからnativeのCメソッドを呼び出すような場合は、この限りでない。 例えば、Twitterでシェアしたのを確認した後、ゲーム内でインセンティブを与えたいといったようなとき、Java側からnativeメソッドを呼び出すようなことになるが、 このときはメインループから呼び出されない。 こういう場合、cocos2d-x内で画像読み込みや音声再生など、リソースにアクセスするような処理を行うと、 セグメンテーションエラーが起きたり、(Fatal signal 11 (SIGSEGV) at 0x00000000) 処理が止まったりする(タッチが反応せず、他のスレッドで描画や音声はそのまま再生できてたりする)。 そういうときは、Javaから呼び出すnativeメソッドではフラグを立てるだけにしておいて、 メインループからフラグをチェックしてインセンティブの処理を行う、のようにすれば回避できる。 |
Androidで、ビューの位置をpx単位で正確に指定したい時の方法。
ゲームアプリの広告表示の場合、 ゲーム部分はフレームワークが自動で拡大縮小してスクリーンサイズに合わせているため、 Androidのxmlでレイアウト指定するものと併せられない。 そこでpxを計算して表示することになる。 方針としては、marginでpx指定することになる。
ポイントとしては、 「pxでの指定」になること(dpではない) 途中計算で使っているdisp.getHeight()はpxの値が返ってくる。 また、MarginLayoutParams.bottomMarginもpx指定となっている。(top,left,rightも同様) |
Intentには設定できるプロパティがいろいろある。
action Intent.ACTION_VIEWなど data type MIME data type とか class Intent呼び出し時に使用するクラスを指定。そのクラスは onReceive(Context, Intent) メソッドをオーバーライドしていて、その中でextraなどを取得して処理を行う category Actionの振る舞いを明確にする。Intent.CATEGORY_BROWSABLEなど flag 呼び出される側の起動する振る舞い。例えばバックグラウンドで呼び出される場合はIntent.FLAG_FROM_BACKGROUND extra 付加情報。例えばIntent.EXTRA_TEXTを使えば、twitterクライアントを起動したとき、本文として表示させたいテキストなどをセットする 参考
PendingIntentは時間差でIntentを作るクラス。 calendar には起動させたい時刻が入っているとする。 LocalNotificationReceiver というクラスに onReceive() メソッドが定義されている。 これによってローカル通知が実装できることになる。 |
twitterに投稿したい。
手軽なので、Intentを使いたい。 ◯テキストだけの場合 めちゃ簡単。
◯画像も投稿する場合 twitterにテキストと画像を投稿する参考 |
Fileクラスの
createNewFile()……IOExceptionが投げられる mkdirs()……falseが返る などが実行できないとき マニフェストに を書くこと。 権限をアプリに持たせないと、外部ストレージに書き込みができない。 |
ScrollView
画面に収まりきらないサイズを表示したいときに使う。 ScrollView は垂直方向のスクロールのみできる。 HorizontalScrollView は水平方向のスクロールのみできる。 両方スクロールしたいときは…? 公式には用意されていない。別記事で。 以下はScrollView(垂直スクロール)に絞って説明する。 ScrollViewの直下には、Layoutしか配置できない。 使い方はとくに難しいことは無い。GraphicalLayoutでそのまま置いていけばよい。
fillViewport スクロールビューの中身(つまり直下のLayout)を、ScrollViewのサイズと同じに合わせるかどうか。ビューの中身がスクロールビューのサイズに対して小さいときに意味が出てくる。 trueかfalseで指定。デフォルトはfalse。つまり中身が少ないとビューが小さくなる。 android:fillViewport="false"の場合。(デフォルト) ScrollViewのbackgroundを赤に、その子のLinearLayoutのbackgroundをシアンにしている。 中身が少ないので、LinearLayoutも小さい。 android:fillViewport="true"の場合。 LinearLayoutもScrollViewと同じサイズになっている。 |
GridLayout
方眼でオブジェクトを並べるレイアウト。iOSでいうとコレクションビュー。
|
TableLayout
テーブルを作成する。htmlのイメージに近いようだ 参考 基本形。 列だけでなく行も揃えられる。
|
FrameLayout
1つのオブジェクトだけを配置するレイアウト。 基本的に左上に置くだけ。複数の子オブジェクトを配置したら単に重なる。ただしlayout_gravity指定は可能。 子オブジェクトとしてLinearLayoutやRelativeLayoutを置くことも可能。 子オブジェクトの表示・非表示を切り替えて、表示内容を変えたりに使うようだ。 RelativeLayoutでも同じことできるじゃんとは思う。ただ意味的にFrameLayoutが合っているということか。 要素 foreground このレイアウト全体を覆う画像。最前面に表示される。idで指定。 #rgb, #aarrggbb などで色指定も可能。ただしこの場合、後述のforegroundGravityと併用はできない(色がつかなくなる) 例
foregroundにsearch(虫眼鏡)画像。 子ビューにドロイド君画像。その手前の子ビューにTextView。 重なりとしては (最前面)虫眼鏡→TextView→ドロイド(最背面) foregravityGroundを指定すると、foreground画像は本来のサイズになり、指定方向に寄る
なお、子オブジェクトがgoneになると、FrameLayoutのサイズ自体が縮まる ↓これが… ↓こうなる。
ただし、measureAllChildrenをtrueにしておくと、可視状態をgoneにしても約まらない。
参考…可視状態 VISIBLE 見える INVISIBLE 見えない。非表示部分を詰めない GONE 見えない。非表示部分を詰める |