【Androidプログラミング】タッチ処理でACTION_DOWNしか発生しない時の解決方法
意外とハマる人が多そうな気もするのでメモ書き。
Android Studioで開発していると、インテリセンス機能を使ってメソッドを挿入することが多いと思う。
例えばタッチイベントを処理するメソッド"onTouchEvent"を挿入するとこんな感じのソースが挿入される
@Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }
実はこれが罠なのだ。
Activityクラスを継承したクラスに汚く直接書けば正しく動作するが、
独自に作成したViewクラスを継承したクラスからだと、親クラスのタッチイベントからfalseが帰ってくる。
タッチ中、またがタッチ終了時にもこのメソッドを呼ぶには、このメソッドがtrueを返す必要がある。
つまり戻り値をtrueにすれば解決。
以下のソースで動作確認してみてください
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: //タップした瞬間 Log.d("LOG","Down"); //ここでfalseを返すと以降のタッチイベントは処理されない //return false; break; case MotionEvent.ACTION_MOVE: //タップし続けて座標が変化している間 Log.d("LOG","Move"); break; case MotionEvent.ACTION_UP: //タップしていた指が話された瞬間 Log.d("LOG","Up"); break; } return true; }
ACTION_MOVEなるとfalseにしてもタッチイベントを取得するのでそちらは工夫が必要。
【Go】mapからキーを削除する方法
参考書どおりに書いたら動かなかったのでメモ
この問題に詰まってここに来た人はこんな感じのコードを書いたんじゃないでしょうか
package main import "fmt" func main(){ m:=make(map[string]int) m["id"]=100 fmt.Printf("%v\n",m) //idを消す m["id"]=0,false //しかしコンパイルエラー }
調べてみたところこのような記事がありました
stackoverflow.com
要約すると、あの書き方は昔のgo言語で使える方法だったけど、今は使えないよ!別の方法を使ってね!ということです。
答えは以下の書き方です
delete(m,"id")
従来の書き方では必ずfalseを渡していたほか、新しく値を代入したところでそのキーは無効化されているため、謎が多い書き方だったみたいです。
delete関数は戻り値を持たないのでキーの削除が成功したかどうかの結果はわかりませんが、
削除後、そのキーが存在するか調べれば消せたかわかります
package main import "fmt" func main(){ m:=make(map[string]int) m["id"]=100 fmt.Printf("%v\n",m) _,ok:=m["id"] //idキーが存在することを確認 fmt.Printf("%v\n",ok) //idキーを削除 delete(m,"id") //idキーが存在するか確認 _,ok=m["id"] //存在しないので結果はfalse fmt.Printf("%v\n",ok) }
map[id:100] true false
もっと英語頑張らないとね。
Google翻訳を手放せるようになりたい
Android Studio2.x 上部バーとタイトルの両方を消す方法
AppCompatActivityってなんでしょう。
いつもActivityに書き換えてます。
フルスクリーン化をしてみる
不完全なフルスクリーン化をしてみます。
プロジェクトは「Empty Activity」と仮定
package com.example.msty.drawsample1; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
これに以下の行を「setContextView」より前に呼び出す
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
これでフルスクリーンフラグを与えてさくっとフルスクリーン化...とはいきません。
まだタイトルバーが残ってますよね。
タイトルバーを消す
実はタイトルバーだけを非表示にするフラグの設定もあるのですが今の状態では機能しません。
タイトルバーも消すには継承するクラスを「Activity」に変更します。
public class MainActivity extends Activity {
こんな感じ。
これでタイトルバーも上部バーも消せます。
タイトルバーだけ消したい場合はこの過去記事読んでね。
msty.hatenablog.jp
Android Studio2.xでタイトルバーを非表示にする方法
ゲーム作るために非表示にする必要があったのでメモ書き
Android Studio2.xではプロジェクトを作成した直後はタイトルバーが表示される。
じゃあ早速タイトルバーを消していこう
今回サンプルで使用しているのは「Empty Activity」
理由はシンプルで何もないから
デフォルトの設定でプロジェクトを作成したならばこんな感じのソースが出来上がると思う
package com.example.msty.notitleproject; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
これは「AppCompatActivity」を継承しているクラスだが、
継承するクラスを「Activity」に変更
すると必要なパッケージがインポートされてないよ!と怒られるので「Alt+Enter」でインポート文の追加
そして、「setContentView」メソッドが呼ばれるより前に、以下の一行を追加する。
requestWindowFeature(Window.FEATURE_NO_TITLE);
このコードを入力中にもう一行インポート文が増えるが、説明は割愛。
これだけでタイトルバーが表示されなくなります。
一応完成品ソース貼っときます。
package com.example.msty.notitleproject; import android.app.Activity; //これはコメントアウトしてオーケー //import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); } }
Windows10にRuby on Rails環境を構築する
過去に少し苦戦したのでメモ
Rubyのインストール
http://rubyinstaller.org/downloadsからRuby2.1.xをインストール
※2.2.xではWindowsだと環境が作れなかったので必ず2.1系にする
同ページにあるDEVELOPMENT KITもダウンロード&解凍。
この際32bit/64bitどちらかに統一すること。
インストールするとパスは通っているが、エクスプローラからコマンドプロンプトを開いた場合、パスの更新が反映されていないので再起動すると楽
rubyのパスを通せたら、解凍したDEVELOPMENT KITのフォルダでコマンドプロンプトを開く
そして次の二つのコマンドを打ち込む
dk.rb init dk.rb install
これでRubyの開発環境完成
Node.jsのインストール
これがないとサーバ起動ができない環境もあるようなのでhttps://nodejs.org/en/からインストール
Ruby On Railsのインストール
以下のコマンドを実行
gem install rails gem uninstall bundler gem install bundler
bundlerを一度アンインストールしているのはバージョン変更のため
ここまで来ればRails環境は完成
サンプルアプリケーションの作成
ちゃんと構築できたかチェックする
あくまで環境構築解説の記事なのでコマンドの説明は割愛
mkdir app cd app rails new sample --skip-bundle cd sample bundle install
最後のbundle installでエラーが出た場合、sampleフォルダにあるGemfileという名前のファイルをテキストエディタで開いて、以下の行を変更する
変更前
# gem 'therubyracer', platforms: :ruby
変更後
gem 'therubyracer', platforms: :ruby