がおまる開発ブログ

cocos2d-xやlevelhelperを使って iPhone/Androidアプリの作り方を解説します

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

cocos2d-xにアスタを導入してみる:Android編

前回はiOS編のアイコン型広告の導入方法を解説しました。
今回はAndroid版を解説します。

前回の記事を参考にして、
新規で広告枠を作成してSDKと識別コードを取得しましょう。

s_20130202_0.png

Android用のメディア識別コードをメモってください
s_20130202_1.png

続いてEclipseを起動して、
SDKをプロジェクトに追加します。

ビルドパスの構成を選択
s_20130202_2.png

s_20130202_3.png

s_20130202_4.png

s_20130202_5.png

次にアイコン設置用のレイアウトファイルを新規で作成します。
layoutで右クリックメニューを開いて新規でxmlファイルを作成します。

その他を選択します
s_20130202_6.png

s_20130202_7.png

今回は「icon.xml」としました
s_20130202_8.png

これで作成されました。
s_20130202_9.png

次にこのファイルを編集していきます。
icon.xmlを開いてください

下記のように書き換えます
これはアイコン1つ分の領域と考えてください。

<?xml version="1.0" encoding="UTF-8"?>
<view
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="80dp"
class="jp.maru.mrd.IconCell"
/>



次に「AndroidManifest.xml」を編集します。
ネットワーク接続するので、権限の追加をします。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.co.fuate.gaomartest"
android:versionCode="1"
android:versionName="1.0">

<uses-sdk android:minSdkVersion="8"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application android:label="@string/app_name"
android:icon="@drawable/icon" android:enabled="true">

<activity android:name=".GaomarTest"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<supports-screens android:largeScreens="true"
android:smallScreens="true"
android:anyDensity="true"
android:normalScreens="true"/>
</manifest>



次に新規でクラスを作成します。「iconAd.java」を作成しましょう。
s_20130202_11.png

s_20130202_12.png

では、編集していきます。

package jp.co.fuate.gaomartest;

import jp.maru.mrd.IconCell;
import jp.maru.mrd.IconLoader;
import android.app.Activity;
import android.view.View;
import android.widget.LinearLayout;

public class IconAd {
private Activity mActivity;
private LinearLayout mLayout;
private IconLoader<Integer> mIconLoader;

public IconAd(final Activity act, final LinearLayout layout, final IconLoader<Integer> iconLoader) {
mActivity = act;
mLayout = layout;
mIconLoader = iconLoader;
adInit();
}

/**
* 広告初期化
*/
private void adInit() {
try {
// ここでicon.xmlファイルを読み込んで来てます
View view = mActivity.getLayoutInflater().inflate(R.layout.icon, null);
if (view instanceof IconCell) {
((IconCell)view).addToIconLoader(mIconLoader);
}

mLayout.addView(view);




} catch(Exception e) {
e.printStackTrace();

}

}
}


次に「Cocos2dxActivity.java」を編集します。

public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener {

private static Cocos2dxActivity myActivity;

// ジャストのサイズにする
private final int FP = LinearLayout.LayoutParams.FILL_PARENT;
// 広告レイアウト
private LinearLayout iconAdView;

// アイコン型広告
private static final String _MEDIA_CODE = "xxxxxxxxxxxxxxxxxx"; //←メモした識別コードに変えてください
private IconLoader<Integer> iconAd;

@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

this.mHandler = new Cocos2dxHandler(this);

myActivity = this;

this.init();

Cocos2dxHelper.init(this, this);
}

@Override
public void showDialog(final String pTitle, final String pMessage) {
if (pTitle.equals("command")&&pMessage.indexOf("iconAd") >= 0) {
String[] str = pMessage.split("@");

if (str[1].equals("0")) {
// アイコン型広告非表示
myActivity.dispIconAdView(false);
} else {
// アイコン型広告表示
myActivity.dispIconAdView(true);

}
}
}

}

public void init() {
// FrameLayout
ViewGroup.LayoutParams framelayout_params =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
FrameLayout framelayout = new FrameLayout(this);
framelayout.setLayoutParams(framelayout_params);

// Cocos2dxEditText layout
ViewGroup.LayoutParams edittext_layout_params =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
Cocos2dxEditText edittext = new Cocos2dxEditText(this);
edittext.setLayoutParams(edittext_layout_params);

// ...add to FrameLayout
framelayout.addView(edittext);

// Cocos2dxGLSurfaceView
this.mGLSurfaceView = this.onCreateView();

// ...add to FrameLayout
framelayout.addView(this.mGLSurfaceView);

this.mGLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());
this.mGLSurfaceView.setCocos2dxEditText(edittext);

// アイコン型広告処理
RelativeLayout adMain = new RelativeLayout(this);
this.initIconAd();

// 広告用RelativeLayoutに追加←RelativeLayoutがキーポイント!
adMain.addView(iconAdView);

// フレームレイアウトに追加
framelayout.addView(adMain);

// Set framelayout as the content view
setContentView(framelayout);
}


/**
* アイコン型広告初期化
*/
private void initIconAd()
{
iconAdView = new LinearLayout(this);

RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(FP, (int)(80 * getResources().getDisplayMetrics().density));

// 中央揃え
iconAdView.setGravity(Gravity.CENTER_HORIZONTAL);
iconAdView.setLayoutParams(layoutParams);

// アイコン型広告識別コード設定
iconAd = new IconLoader<Integer>(_MEDIA_CODE, this);
// 更新インターバル15秒
iconAd.setRefreshInterval(15);

// 今回は4つのアイコンを設置します
for (int ii=0; ii<4; ii++) {
final LinearLayout iconAdSubView = new LinearLayout(Cocos2dxActivity.this);
LinearLayout.LayoutParams layoutSubParams = new LinearLayout.LayoutParams(1, (int)(80 * getResources().getDisplayMetrics().density), 1.0f);
iconAdSubView.setLayoutParams(layoutSubParams);

// ここでIconAd.javaを呼び出します
new IconAd(Cocos2dxActivity.this, iconAdSubView, iconAd);

// 設定したアイコンデータをViewに追加する
iconAdView.addView(iconAdSubView);

}

}

}


これで上部に表示されました。
s_20130202_14.png

下に表示したい場合はこうします。
ALIGN_PARENT_BOTTOMを指定します。

/**
* アイコン型広告初期化
*/
private void initIconAd()
{
iconAdView = new LinearLayout(this);

RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(FP, (int)(80 * getResources().getDisplayMetrics().density));

// ALIGN_PARENT_BOTTOMを指定します
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
iconAdView.setGravity(Gravity.CENTER_HORIZONTAL);
iconAdView.setLayoutParams(layoutParams);

iconAd = new IconLoader<Integer>(_MEDIA_CODE, this);
iconAd.setRefreshInterval(15);

for (int ii=0; ii<4; ii++) {
final LinearLayout iconAdSubView = new LinearLayout(Cocos2dxActivity.this);
LinearLayout.LayoutParams layoutSubParams = new LinearLayout.LayoutParams(1, (int)(80 * getResources().getDisplayMetrics().density), 1.0f);
iconAdSubView.setLayoutParams(layoutSubParams);
new IconAd(Cocos2dxActivity.this, iconAdSubView, iconAd);

iconAdView.addView(iconAdSubView);

}

}



はい、下に出ました
s_20130202_15.png

任意の高さに出す場合は


/**
* アイコン型広告初期化
*/
private void initIconAd()
{
iconAdView = new LinearLayout(this);

RelativeLayout.LayoutParams layoutParams =
new RelativeLayout.LayoutParams(FP, (int)(80 * getResources().getDisplayMetrics().density));

// 一旦下に表示させる
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
// ディスプレイのインスタンス生成
Display disp = wm.getDefaultDisplay();
// 画面のheightを取得して比率を計算して下から120pxの位置に表示させる
int yPos = (disp.getHeight() * 120) / 480;
layoutParams.setMargins(0, 0, 0, yPos);

iconAdView.setGravity(Gravity.CENTER_HORIZONTAL);
iconAdView.setLayoutParams(layoutParams);

iconAd = new IconLoader<Integer>(_MEDIA_CODE, this);
iconAd.setRefreshInterval(15);

for (int ii=0; ii<4; ii++) {
final LinearLayout iconAdSubView = new LinearLayout(Cocos2dxActivity.this);
LinearLayout.LayoutParams layoutSubParams = new LinearLayout.LayoutParams(1, (int)(80 * getResources().getDisplayMetrics().density), 1.0f);
iconAdSubView.setLayoutParams(layoutSubParams);
new IconAd(Cocos2dxActivity.this, iconAdSubView, iconAd);

iconAdView.addView(iconAdSubView);

}

}



下から120dipの場所に表示されました。
s_20130202_16.png

こんな感じで表示されます。


スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://gaomar.blog.fc2.com/tb.php/37-bce0a72b
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。