2014年01月13日

Android カメラが縦向き(Portrait)の時にSurfaceViewのプレビュー画面がおかしくなる件について

AndroidプログラミングでPortraitにした時、どうしてもアスペクト比がおかしな、90度傾いたプレビュー画面が表示されちゃい困ってしまったのでメモ。

とりあえず調べた解決できたけどOrientation固定の方がいいのかなぁ…
でもUIレイヤーは固定したくないというジレンマ…


public void surfaceChanged(SurfaceHolder arg0, int arg1, int w, int h)
{
try
{
camera.stopPreview();
Camera.Parameters param = camera.getParameters();
WindowManager wm =
(WindowManager)Global.mainActivity.getSystemService(Context.WINDOW_SERVICE);
Display dp = wm.getDefaultDisplay();
int rot = dp.getRotation();
int d = 0;
switch(rot)
{
case Surface.ROTATION_0:
d=90;
param.setPreviewSize(h,w );
break;
case Surface.ROTATION_90:
d=0;
param.setPreviewSize(w, h);
break;
case Surface.ROTATION_180:
d=270;
param.setPreviewSize(h,w );
break;
case Surface.ROTATION_270:
d=180;
param.setPreviewSize(w, h);
break;
}
camera.setDisplayOrientation(d);param.setRotation(d);
//camera.setPreviewDisplay(getHolder());



camera.setParameters(param);
camera.startPreview();

}
catch (Exception e)
{
// TODO 自動生成された catch ブロック
Toast.makeText(Global.mainActivity.getApplicationContext(), "レベル3", 0).show();
}
}
続きを読む



posted by castor-09 at 02:36 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

2014年01月11日

UnityのRigidBodyや物理特性マテリアル設定

UnityのRigidBodyや物理特性マテリアル設定をよく忘れるので自分用にメモw

Rigidbodyの設定

Mass … 質量 min 0 max 100
Drag … 移動させるさいの空気抵抗 0だと空気抵抗なし
Angular Drag … 回転に対する空気抵抗 0だと空気抵抗なし
Use Gravity … 重力のON、OFF
Is Kinematic … 物理エンジンによる影響のON、OFF ONだと物理エンジンの影響を受けない
Interpolate … アニメーション間の動きを補完してくれる
Collision Detection … 衝突検知に使われる
Constranints … 特定の軸の動きを制限する



物理特性マテリアルの設定

Dynamic Friction … 物体が動いてる時の摩擦係数 0だと摩擦なし min 0 max 1
Static Friction … 物体が止まってる時の摩擦係数 0だと摩擦なし min 0 max 1
Bounciness … 反発係数。跳ね返りの強さ。0だと反発なし  min 0 max 1
Friction Combine … オブジェクト同士が衝突した時の摩擦係数の計算方法を指定する
Bounce Combine … オブジェクト同士が衝突した時の反発係数の計算方法を指定する 
Friction Direction2 … 衝突した時の方向が摩擦によってどう影響するか指定できる
Dynamic Friction2 … Friction Direction2を設定した時に使われる。物体が止まってる時の摩擦係数。
Static Friction2 … Friction Direction2を設定した時に使われる。物体が動いてる時の摩擦係数。




posted by castor-09 at 10:08 | Comment(0) | Unity | このブログの読者になる | 更新情報をチェックする

AndroidアプリへAdmob広告を入れる方法…

Androidアプリに広告を入れてみようと色々やってみましたが1日格闘してなんとか表示まで行き着きましたw

Admob登録以降の簡単な表示までの流れ

(1)とりあえずAndroid Development Tools(ADT)のアプデがある可能性があるのでEclepseのメニュー、ヘルプから更新の確認をクリック。


(2)更新を終えたらAndroid SDK マネージャーを起動。Extrasの中にあるGoogle Admob ads SDKをインストール。



(3)適当なプロジェクトを用意。自分は今回「TestAdmob」というプロジェクトを作成。



(4)プロジェクト内のlibsフォルダに「GoogleAdMobAdsSdk-6.4.1.jar」を挿入。GoogleAdMobAdsSdk-6.4.1.jarはSDKからインストール済みなら
      android-sdk-windows → extras → google → admob_ads_sdk
のとこにあると思います。



(5)GoogleAdMobAdsSdk-6.4.1.jarをlibsフォルダに入れた後はプロジェクトを選択して右クリック。
プロジェクトのプロパティからJavaのビルドパスを選択。ライブラリタブからjar追加を選択し、libsフォルダ内のGoogleAdMobAdsSdk-6.4.1.jarを追加します。



(6)次にAndroid Manifest XML に必要な記述を追加します

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

<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />



<実際に追記してみた画像>



(7)ここまで長々と書きましたがあとはもうちょっとw残るはJAVAのコードを書くだけです。
凄く簡単に書いたものですがこれで表示可能です。

package com.example.testadmob;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.LinearLayout;

import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

public class MainActivity extends Activity
{
private AdView adview;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout ll =new LinearLayout(this);
setContentView(ll);

adview = new AdView(this, AdSize.BANNER, "広告ユニットIDを書く部分");
ll.addView(adview);

//テスト広告表示用
AdRequest adRequest = new AdRequest();
adRequest.addTestDevice(AdRequest.TEST_EMULATOR); // エミュレータ用
adRequest.addTestDevice("テストに使いたいデバイスのIDを書く部分");// 実機用
adview.loadAd(adRequest);

// 一般的なリクエストを行って広告を読み込む
// adview.loadAd(new AdRequest()); //広告表示用
}


}



やってて詰まったのは旧バージョンの記事で広告ユニットID部分がパブリッシャIDと記述されていて

external/chromium/net/disk_cache/stat_hub.cc:190: [0110/174950:ERROR:stat_hub.cc(190)] StatHub::Init - App isn't supported.

のエラーがずっと出てたこと
使うのはpub-**********ではなく、ca-app-pub-*************の方

あとはAdmobテスト表示用のAndroid デバイスIDがわからなかったことですね。
Amdroid Device IDなるアプリインストールして表示、開発者向けオプションの端末ID、製造番号
MEID、IMSIとか全部ダメでどうしようかと思いましたw

そしたらデバイスIDは普通に広告表示してアプリ起動したときに

To get test ads on this device, call adRequest.addTestDevice(ここにID表示されてたw);

というイケメンコメントをLogCatに発見し無事解決しましたw

とりあえず1日で表示までこぎつけれてホントによかった…






posted by castor-09 at 01:49 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする