2012年8月6日月曜日

近々VerUPかけたい

各アプリをSDカードに移せるようにVerUPしたいです。

SDカードに移せるようにするには簡単で、マニフェスト?マニュフェスト?に一行追加するだけ。
むしろデフォルトでオートしといてよとおもいます。

あと以前コメントくれた方のソースを見て、解説できる範囲でしたいです。

ではでは

2012年3月27日火曜日

タッチした場所に画像を表示する際にずれる

タッチ場所を検出する際
【onSurfaceChanged(GL10 gl, int width, int height){}】
のwidthとheightので計算していました。
下記計算方法
-------------------------------
tochSet(Event event){
x = event.getX();
y = height - event.getY();
}
--------------------------------

しかし、この情報と実際の画面情報が異なり、実際の画面サイズより50位大きかった。
それにより、タッチした場所よりマイナス50された値が帰ってきてました。
以下内容に変更しました。

-------------------------------------
//フィールド
//画面情報保持用の変数
int mGLHeight = 0;
int mGLWidth = 0;

onSurfaceChanged(GL10 gl, int width, int height) {
        //画面取得の自作メソッド
        setWindowSize();

        // ビューポートの設定
   gl.glViewport(0, 0, width, mGLHeight);

                **省略**

// 2Dの投影
    GLU.gluOrtho2D(gl, 0.0f, width, 0.0f, mGLHeight);
}

//画面情報を取得するメソッド
private void setWindowSize() {
  WindowManager windowmanager = (WindowManager)  getSystemService(WINDOW_SERVICE);
  Display disp = windowmanager.getDefaultDisplay();
  mGLWidth = disp.getWidth();
   mGLHeight = disp.getHeight();
}

tochSet(Event event){

x = event.getX();
y = mGLHeight - event.getY();
}
---------------------------------------

setWindowSize();
変数に画面情報を取得する(タッチイベントなどで使うから)
これをメソッド化したのは、他でも使えるかもしれないからですが、変数に入れてるからいらないかもですね。

ビューポートと2Dの投影にmGLHeightをセットする。これにより誤差がなくなりました。(mGLWidthは今のところ不具合でていないのでそのまま)

tochSet();
これはタッチ時に呼ぶ自作メソッドです。タッチイベントに記載してください。

これにより、画面サイズが異なる端末でもちゃんと座標が取得できると思います。
又、画面サイズを取得しているのでこれを元にレイアウトも決めれるのではないでしょうか。
以上が解決作になります。

OpenGL透過処理について

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
上記を使うと、透過(アルファ値)も計算してしまし、透明化できない問題があるらしい。
いろいろ調べた結果、海外の人とかは、GLUtils.texImage2Dを使わずに独自に計算してる人が多いみたい。
自分はそういうが良く分からず、いろいろ回った結果下記がありました。
http://stackoverflow.com/questions/2361602/transparent-texture-in-opengl-es-for-android

テクスチャのロード時じゃなく、drawするところに下記を追加すると透過処理できました。

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

2012年3月25日日曜日

OpenGLのBuffer問題


OpenGLES (SDK target 3) called a GL11 Pointer method with an indirect Buffer.
というエラーが表示されてしまう。

これはBufferの仕方によって、出るエラーらしい。

https://sites.google.com/a/gclue.jp/android-docs-2009/2dno-miao-hua
このサイトを参考に作っていったら、一応エラーは出ずに動きました。

結構親切に解説されてます。

2012年3月16日金曜日

バージョンアップのお知らせ

Tag to Board
Ver1.0.0
アプリを公開しました。
Ver1.1
・【改善】バージョン表記の変更をしました。
・【要望】『メモ作成画面のテキスト入力幅をリストと一緒にしてほしい』
メモ作成画面の幅をメモリスト画面の幅に近づけました。
・【修正】メモ作成時行数が増えた場合、スクロールできない問題を修正しました。
・【修正】端末によってレイアウトが崩れる問題を修正しました。
・【機能追加】メニューに「紹介」を追加しました。

今運おみくじ
Ver1.0
アプリを公開しました。
Ver1.1
・【機能追加】共有機能を実装しました。
Ver1.2
・【更新】外部jarのバージョンアップに対応しました。
・【更新】紹介のリンク先を追加
・【改善】おみくじの出る確率の変更をしました。

反射神経トレーニング-Training Reflexes-
Ver1.0
アプリを公開しました。
Ver1.1
・【要望】『ゲームスタート後の状況が分かりにくい』
ゲームスタート時、画面上部にゲーム説明が表示されるように修正しました。
・【機能追加】共有機能を実装しました。
Ver1.2
・【改善】ランキング登録時にランク外のデータを削除するように変更しました。
・【改善】結果を算出する方法を変更しました。
・【要望】『赤から青に変わるタイミングが長い』
赤から青に変わる最大秒数を2秒間縮めました。
Ver1.3
・【改善】共有機能にテキストを追加しました。

Signal Puzzle
Ver1.0
・アプリを公開しました。
Ver1.1
・【改善】言語、英語に対応しました。
・【更新】外部jarのバージョンアップに対応しました。


-------------カテゴリー説明---------------------------
【修正】…不具合修正
【改善】…制作している上で改善できるもの・使いに難い物の修正
【要望】…ユーザー様等からの意見反映
【更新】…SDKなどのバージョンアップ
【機能追加】…新機能追加
-------------------------------------------------------

string.xmlからsettextする際の失敗例

今回マルチランゲージを行った際の不具合を紹介します。

Signal Puzzleではゲーム中に、時間・タッチ回数などを更新時、データベースをリスト表示する時にテキストをセットしています。

この時にstring.xmlのリソースを取得してセットしていたんですが、単体では使えたけど、複数の文字列を扱う場合、使えませんでした。以下内容になります。

---------------------初期----------------------
TextView text1

*******省略*******

text1.setText("こんにちは");
---------------------変更1---------------------
text1.setText(R.string.xxx);
---------------------変更2---------------------
text1.setText("おはようございます"+R.string.xxx);
-----------------------------------------------

上記のように変更してみました。そうした場合変更2は失敗しました。

【表示時】
---初期-----
こんにちは
---変更1----
こんにちは
---変更2----
おはようございますxxxxxxxxxxx(R.string.xxxのリソースid)
------------

下記のように修正しました。

--------------------- 変更3 ----------------------
TextView text1
String viewtext1

*******省略*******

viewtext1 = getString(R.string.xxx);
text1.setText("おはようございます"+viewtext1);
-------------------------------------------------

【表示時】
---変更3----
おはようございますこんにちは
------------

【結論】
複数の文字列をセットする場合は、一度単体でStringデータを取得して、セットしてあげるのが良いようです。
単体で使う場合でも取得してからの方が良いかもしれませんね!

これ位常識なのかな・・・?

以上になります。

マルチランゲージについて

今回のSignalPuzzleで初のマルチランゲージに挑戦しました。(英語と日本語だけですが)

1.言語の種類を決める(今回は日本語・英語)
2.メインになる言語を決める(今回は英語)
3.言語によって変わる文字列は[string.xml]に入れる(2で決めた言語で入れる)
4.[res]フォルダに[values-ja]フォルダを作る(jaは日本語用)
5.[values]フォルダ内の[string.xml]を[values-ja]フォルダにコピペする
6.[values-ja]フォルダ内の[string.xml]に記載されている文字列を日本語にする。

上記の手順で2ヶ国語対応になります。

言語が英語だった場合、values-xxにenが無いのでvaluesのstring.xmlが読み込まれ、
言語が日本語だった場合、values-xxにjaがあるのでvalues-jaのstring.xmlが読み込まれます。
言語が上記2つじゃなかった場合、valuesのstring.xmlが読み込まれます。

言語のメインを英語にしたのは、幅広く使われている為です。

上記適用時に失敗した例の記事。
http://atu-aka.blogspot.com/2012/03/2.html

2012年3月15日木曜日

Signal Puzzleを公開しました。

今回はパズルゲームを公開しました。
パネルをタッチすると、タッチしたパネルと周囲のパネルの色が反転します。
すべてを青に変えるとクリアになります。

全100問のメインモード
問題がランダム生成されるランダムモード
暇つぶしにご利用ください!













今回はプログラム部分で苦労したというより、デバッグ・問題作成で苦労しました。
自分で作ったステージがなかなかクリアできなくて・・・・

2012年2月23日木曜日

ほぼ、正確な秒数を測る方法

おそらく検索すれば簡単に出てくると思いますが。
System.currentTimeMillis();
このメソッドを使うと本体の時刻をms単位で返してきます(long)。

10分程度で簡単なものを作りました。

ボタンがトグルしてスタート・ストップの役割をします。

ストップウォッチみたいな感じです

例)class名 TestCurrentTimeProjectActivity
-------------------------------

public class TestCurrentTimeProjectActivity extends Activity {
/** Called when the activity is first created. */
long startTime;
long currentTime;
        long sec;
Button button1;
TextView time;

int scn = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
time = (TextView) findViewById(R.id.time);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
                                //ボタンをクリックしたらstartchek()のメソッドか呼ばれます
startchek();
}
});
}

private void startchek() {
if (scn == 0) {
                        //最初のボタンクリック時の現在の時刻を取得
startTime = System.currentTimeMillis();
scn = 1;
} else {
//2回目のボタンクリック時の時刻を取得
currentTime = System.currentTimeMillis();
//1回目と2回目の時刻を引いて1000ms秒(1秒)で割る。
sec=(currentTime - startTime)/1000;
//経過時間をテキストにセット
time.setText(String.valueOf(sec));
scn = 0;
}
}
}
-----------------------------------------------------
--------------------xml------------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/time"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="count" />

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

</LinearLayout>
------------------------------------------------------


2012年2月21日火曜日

反射神経トレーニング-Training Reflexes-を公開しました。

反射神経トレーニング-Training Reflexes-を公開しました。
反射神経のトレーニングアプリです。
スタートボタンを押した後、赤い四角が青い四角に変わったら四角をおしてください。
マイランキングを共有しよう!

AndroidMarket
https://market.android.com/details?id=com.akasaka.reflexes1&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5ha2FzYWthLnJlZmxleGVzMSJd














Ver1.1から共有機能が使えるようになりました。

2012年2月17日金曜日

「今運おみくじ」を公開しました。


Android端末向けにアプリを公開しました。
↓↓↓AndroidMarket↓↓↓↓


現在、SE・BGM・振動等の機能が無い為、わかりにくくなっています。
次回以降のVerUPで少しずつ改善していきたいと思います。

同時並行で次のアプリも作成していきます。

アプリをみて、ここどうやってるの?とかあれば、ソースコード全開示まではいきませんが、助言できる範囲でソースコードを公開していこうと思います。


※※※※※※※※※※今回このアプリで使用した機能※※※※※※※※※※
Open-csvによるcsvファイルの読み込み
Random
Timer
Handler
加速度センサー

2012年2月10日金曜日

backを2回押してアプリ終了

マクドナルドアプリ等、backを1度押すとToastが表示され、Toast表示中にもう一度backを押すとアプリが終了するものを作成してみました。

-------------------------------------------

Toast finToast;
// backkeyで使うスレッド用////////////////////
Timer bTimer = null;
// 動いてるか動いてないかのチェック用
boolean bChk = false;
//バックを実行するかどうか
int bStar = 0;
//秒数かうんと
int bcount = 0;

        @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    finToast =Toast.makeText(this, "[戻る]をもう一度押すと終了", Toast.LENGTH_SHORT);
               // ここ自由

}

        @Override
protected void onResume() {
super.onResume();
bStar = 0;
}

protected void onPause() {
super.onPause();
backCountStop();
}

///////////////////Back///////////////////////////////////

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// なんのkeydownかを判断 今回はバックキー
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(bStar == 0){
finToast.show();
bStar = 1;
backCountStart();
}else {
backCountStop();
finToast.cancel();
finish();
}

}
return false;
}

// //////////////////////タイマー/////////////
public void backCountStart() {
// 動いてたらそのまま
if (bChk) {
// 止まってたら起動
} else {

bTimer = new Timer(true);
bTimer.schedule(new TimerTask() {
@Override
public void run() {
if(bcount == 2){
bStar =0;
bcount = 0;
backCountStop();
}
bcount++;
}
}, 1000, 1000); // 初回起動の遅延と周期指定。単位はms
bChk = true;
}
}

public void backCountStop() {
// 動いてたら入る、止まってたらスルー
if (bChk) {
if (bTimer != null) {
bTimer.cancel();
bTimer = null;
}
bChk = false;
}
}

-------------------------------------------------
とりあえずこんな感じです。

後々デバッグで修正する可能性有りです

上記より良い方法があったら教えてください!

2012年2月7日火曜日

Backボタンでアプリを終了させる方法について

わかりづらかったので一部書き換えます。

一般的にActivityを意図的に終了させる場合、「finish();」を使います。
※Home画面に戻る場合「moveTaskToBack(boolean nonRoot);」

しかし、Activityが2つ以上あり、2つ目のActivityに画面遷移した場合、そのActivityで「finish();」しても1つ目のActivityに戻ってしまいました。(1つ目のActivityが生きているので)

なので画面遷移する際の「Intent」後に「finish();」をしました。


例)
----------------------------------------------------
//ボタンの入れ物
Button button
//クリエイト

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.■■);
//ボタンにidを入れる
button = (Button) findViewById(R.id.▲▲);
//ボタンにリスナーとクリック処理をセットする
button.setOnClickListener(new OnClickListener(){


    public void onClick(View v) {
        //●●classに画面遷移する。
        startActivity(new Intent(▼▼, ●●.class));
        //現在居るActivityを終了する。
        finish();

    }

});

----------------------------------------------------
※打ちなおしてるのでスペルミス有ったらすいません。


皆さんの悩みが解決すると幸いです。

2012年2月5日日曜日

アプリ2作品目

現在作成に勤しんでおります。
なるべく早く公開出来るように頑張ります。

今回のアプリで使用する機能
CsvFileの読み込み
OpenCsv
加速度センサー
Timer

2012年2月4日土曜日

AndroidMarketにアップロードする際の注意


AndroidMarketに「Tag to Board」をアップロードした際に悩んだ点を1つご紹介します。


アプリをアップロードし、公開しましたが「このアプリケーションは 0 台以上の端末でご利用いただけます。」となり、公開したにも関わらず検索にかかりませんでした。


私の場合、「機能: android.hardware.screen.portraitが原因でした。


AndroidManifest.xml内のActivityに対して
android:screenOrientation="portrait"
で画面を縦固定していました。


これを画面固定したいActivity内で
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
する事で解決しました。(上記は縦画面固定です。)


同じ内容で悩んでいる方の解決になれば幸いです。

Android端末向けアプリを公開しました。

2012年1月26日より、android端末向けアプリケーション「Tag to Board」を公開しました。

自己開発アプリ1作目の簡単なメモ帳です。
付箋をコルク板に張るイメージでつくりました。

よろしくお願いします。

要望・不具合がございましたらご報告お願いします。

検索時は「Tag to Board」か「Atushi Akasaka」
アプリ画面です














AndroidMarket
https://market.android.com/details?id=com.akasaka.tagtoboard&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5ha2FzYWthLnRhZ3RvYm9hcmQiXQ..

はじめまして

2011年8月頃より、Android端末向けのアプリ開発をはじめました。
まだまだ、新米開発者ではありますがよろしくおねがいします。