忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 11:36 】 |
AndroidでYouTube動画再生
インテントを使ってYouTubeアプリを起動するだけ。


Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("vnd.youtube:" + youtubeId));
intent.putExtra("VIDEO_ID", youtubeId);
instance.startActivity(intent);



youtubeIdは動画ID。URLに含まれているもの。
インテントが無いときは、PlayストアのYouTubeアプリのページに飛ばしたりするとよいかと思われる

PR
【2015/03/31 16:35 】 | Android | 有り難いご意見(0)
Androidのスレッド
Androidはiosと比べてスレッドに気をつけて実装する必要がある。

描画処理をメインスレッドで実行するとすぐ落ちる。
runOnUiThread()とは仲良くなっておこう。

runOnUiThread(new Runnable() {
@Override
public void run() {
View view = MainActivity.this.findViewById(R.id.myView);
view.setVisibility(View.VISIBLE);
}
});





cocos2d-xを使っている場合
cocos2d-xの処理は、できるだけメインループである

void cocos2d::Scheduler::update(float dt)



から呼び出される中で実行した方が良い。
といっても、普通に実装していれば大抵はこの中から呼び出される。


JavaからnativeのCメソッドを呼び出すような場合は、この限りでない。
例えば、Twitterでシェアしたのを確認した後、ゲーム内でインセンティブを与えたいといったようなとき、Java側からnativeメソッドを呼び出すようなことになるが、
このときはメインループから呼び出されない。

こういう場合、cocos2d-x内で画像読み込みや音声再生など、リソースにアクセスするような処理を行うと、
セグメンテーションエラーが起きたり、(Fatal signal 11 (SIGSEGV) at 0x00000000)

処理が止まったりする(タッチが反応せず、他のスレッドで描画や音声はそのまま再生できてたりする)。

そういうときは、Javaから呼び出すnativeメソッドではフラグを立てるだけにしておいて、
メインループからフラグをチェックしてインセンティブの処理を行う、のようにすれば回避できる。





【2015/03/20 18:58 】 | Android | 有り難いご意見(0)
動的にビューの位置を指定
Androidで、ビューの位置をpx単位で正確に指定したい時の方法。

ゲームアプリの広告表示の場合、
ゲーム部分はフレームワークが自動で拡大縮小してスクリーンサイズに合わせているため、
Androidのxmlでレイアウト指定するものと併せられない。
そこでpxを計算して表示することになる。

方針としては、marginでpx指定することになる。



//スクリーンサイズ取得
WindowManager wm = getWindowManager();
Display disp = wm.getDefaultDisplay();

//座標を計算
int bottomMargin = 1.0 * 120 / VIRTUAL_SCREEN_HEIGHT * disp.getHeight();

//MarginLayoutParamsにセット
View view = MainActivity.this.findViewById(R.id.view); //このビューはxmlでlayout_alignParentBottom="true"になっている想定(ので、bottomMarginが効く)
android.view.ViewGroup.MarginLayoutParams viewMargin = (android.view.ViewGroup.MarginLayoutParams)view.getLayoutParams();
viewMargin.bottomMargin = bottomMargin; //ここで指定
view.setLayoutParams(viewMargin);



ポイントとしては、
「pxでの指定」になること(dpではない)

途中計算で使っているdisp.getHeight()はpxの値が返ってくる。
また、MarginLayoutParams.bottomMarginもpx指定となっている。(top,left,rightも同様)

【2015/03/09 14:24 】 | Android | 有り難いご意見(0)
AndroidのIntent
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クライアントを起動したとき、本文として表示させたいテキストなどをセットする




参考



Intent i = new Intent(getApplicationContext(), LocalNotificationReceiver.class);
i.putExtra("notification_id", tag);
i.putExtra("message", message);

PendingIntent sender = PendingIntent.getBroadcast(this, tag, i, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);



PendingIntentは時間差でIntentを作るクラス。
calendar には起動させたい時刻が入っているとする。

LocalNotificationReceiver というクラスに onReceive() メソッドが定義されている。
これによってローカル通知が実装できることになる。


【2015/02/03 14:13 】 | Android | 有り難いご意見(0)
Androidでtwitterにテキストと画像を投稿(Intent)
twitterに投稿したい。
手軽なので、Intentを使いたい。


◯テキストだけの場合
めちゃ簡単。


String encodedText;
try {
encodedText = URLEncoder.encode(text, "UTF-8");
} catch ( java.io.UnsupportedEncodingException ignore ) {
encodedText = text;
}

String encodedUrl = "http://twitter.com/share?text=" + encodedText;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(encodedUrl));
getContext().startActivity(intent);




◯画像も投稿する場合

twitterにテキストと画像を投稿する参考
【2015/01/29 14:42 】 | Android | 有り難いご意見(0)
ファイルやディレクトリが作成できない
Fileクラスの
createNewFile()……IOExceptionが投げられる
mkdirs()……falseが返る
などが実行できないとき

マニフェストに

を書くこと。

権限をアプリに持たせないと、外部ストレージに書き込みができない。



【2015/01/29 13:15 】 | Android | 有り難いご意見(0)
ScrollView
ScrollView
画面に収まりきらないサイズを表示したいときに使う。

ScrollView は垂直方向のスクロールのみできる。
HorizontalScrollView は水平方向のスクロールのみできる。
両方スクロールしたいときは…? 公式には用意されていない。別記事で。

以下はScrollView(垂直スクロール)に絞って説明する。


ScrollViewの直下には、Layoutしか配置できない。

使い方はとくに難しいことは無い。GraphicalLayoutでそのまま置いていけばよい。






<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<ScrollView
android:id="@+id/scrollView1"
android:layout_width="70dp" スクロールするようにわざと小さめにしてるだけ
android:layout_height="70dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginTop="100dp"
android:layout_marginRight="142dp"
>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

</LinearLayout>

</ScrollView>

</RelativeLayout>





fillViewport
スクロールビューの中身(つまり直下のLayout)を、ScrollViewのサイズと同じに合わせるかどうか。ビューの中身がスクロールビューのサイズに対して小さいときに意味が出てくる。
trueかfalseで指定。デフォルトはfalse。つまり中身が少ないとビューが小さくなる。

android:fillViewport="false"の場合。(デフォルト)

ScrollViewのbackgroundを赤に、その子のLinearLayoutのbackgroundをシアンにしている。
中身が少ないので、LinearLayoutも小さい。

android:fillViewport="true"の場合。

LinearLayoutもScrollViewと同じサイズになっている。

【2014/08/29 17:11 】 | Android | 有り難いご意見(0)
GridLayout
GridLayout
方眼でオブジェクトを並べるレイアウト。iOSでいうとコレクションビュー。




<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="88dp"
android:layout_marginTop="83dp"
android:columnCount="3"
android:orientation="vertical"
android:rowCount="3"
android:rowOrderPreserved="true" >

<ImageView
android:id="@+id/imageView1"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView2"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView3"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

<ImageView
android:id="@+id/imageView4"
android:layout_gravity="left"
android:src="@drawable/ic_launcher" />

</GridLayout>

</RelativeLayout>









【2014/08/29 16:30 】 | Android | 有り難いご意見(0)
TableLayout
TableLayout
テーブルを作成する。htmlのイメージに近いようだ


参考


基本形。
列だけでなく行も揃えられる。



<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginTop="21dp" >

<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />

</TableRow>

<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />

</TableRow>

<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextViewaaaaa" />

<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/abc_ab_bottom_solid_dark_holo" />

</TableRow>

<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_dialog" />

</TableRow>

</RelativeLayout>


【2014/08/29 13:43 】 | Android | 有り難いご意見(0)
FrameLayout
FrameLayout
1つのオブジェクトだけを配置するレイアウト。
基本的に左上に置くだけ。複数の子オブジェクトを配置したら単に重なる。ただしlayout_gravity指定は可能。
子オブジェクトとしてLinearLayoutやRelativeLayoutを置くことも可能。
子オブジェクトの表示・非表示を切り替えて、表示内容を変えたりに使うようだ。

RelativeLayoutでも同じことできるじゃんとは思う。ただ意味的にFrameLayoutが合っているということか。


要素

foreground
このレイアウト全体を覆う画像。最前面に表示される。idで指定。
#rgb, #aarrggbb などで色指定も可能。ただしこの場合、後述のforegroundGravityと併用はできない(色がつかなくなる)




<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="86dp"
android:layout_marginTop="45dp"
android:foreground="@drawable/abc_ic_search" > <!-- ここ!!!!!!! ->

<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="TextView" />
</FrameLayout>

</RelativeLayout>







foregroundにsearch(虫眼鏡)画像。
子ビューにドロイド君画像。その手前の子ビューにTextView。
重なりとしては
(最前面)虫眼鏡→TextView→ドロイド(最背面)


foregravityGroundを指定すると、foreground画像は本来のサイズになり、指定方向に寄る


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="86dp"
android:layout_marginTop="45dp"
android:foreground="@drawable/abc_ic_search"
android:foregroundGravity="right"
>

<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="TextView" />
</FrameLayout>
</RelativeLayout>








なお、子オブジェクトがgoneになると、FrameLayoutのサイズ自体が縮まる

↓これが…

↓こうなる。


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<FrameLayout
android:id="@+id/frameLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="86dp"
android:layout_marginTop="45dp"
android:foreground="@drawable/abc_ic_search"
android:foregroundGravity="right" >

<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" <!-- 注目!!!!!! ->
android:src="@drawable/ic_launcher" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp" />

</FrameLayout>

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/frameLayout1"
android:layout_below="@+id/frameLayout1"
android:src="@drawable/abc_ab_bottom_solid_dark_holo" />

</RelativeLayout>







ただし、measureAllChildrenをtrueにしておくと、可視状態をgoneにしても約まらない。


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutmaster.MainActivity" >

<FrameLayout
android:id="@+id/frameLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="86dp"
android:layout_marginTop="45dp"
android:foreground="@drawable/abc_ic_search"
android:foregroundGravity="right"
android:measureAllChildren="true" > <!-- 注目!!!!!! ->

<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:src="@drawable/ic_launcher" />

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp" />

</FrameLayout>

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/frameLayout1"
android:layout_below="@+id/frameLayout1"
android:src="@drawable/abc_ab_bottom_solid_dark_holo" />

</RelativeLayout>







参考…可視状態
VISIBLE 見える
INVISIBLE 見えない。非表示部分を詰めない
GONE 見えない。非表示部分を詰める

【2014/08/29 12:33 】 | Android | 有り難いご意見(0)
<<前ページ | ホーム | 次ページ>>