(2014年1月)MacBook Air + VMware Fusion 6 + Windows 8.1

準備するもの

1. VMware Fusion 6のインストール

http://www.vmware.com/jp/products/fusion/から無償評価版をダウンロードする。ダウンロードした'VMware-Fusion-6.0.2-1398658.dmg'をダブルクリックして開き、'VMware Fusion.app'を'アプリケーション'フォルダにコピーする。

2. Windows8.1の仮想マシンを作成

VMware Fusionの公式ドキュメントhttp://www.vmware.com/files/jp/pdf/fusion_getting_started_60_ja.pdfを読みながら。

  1. DVDドライブにWindows8.1 64bit版のDVDを入れる。
  2. 'アプリケーションフォルダ'内の'VMware Fusion.app'を開くとライセンスの入力画面が出てくるので、今回は30日無償評価版を選ぶ。メールアドレスを入力して次に進む。
  3. '仮想マシンを作成'画面で'ディスクまたはイメージからインストール'を選択し'続ける'をクリックする。
  4. ディスクを選択して'続ける'をクリックする。
  5. 'Microsoft Windows 簡易インストール'画面で'簡易インストールを使用'にチェックを入れ、アカウント名とWindowsプロダクトキーを入力し、'Windowsのバージョンを選択してください'は'Windows 8.1'を選び、'続ける'をクリックする。
  6. '統合'画面で'さらにシームレス'を選択して'続ける'をクリックする。
  7. 名前と場所を入力して'終了'をクリックする。(デフォルトでは名前:'Windows 8 x64.vmwarevm'、場所:'/書類/仮想マシン')
  8. あとはVMware自動的にインストールしてくれる。
  9. インストールが完了したらVMwareでスナップショットをとっておく。そうすると、わざわざクリーンインストールしなくても、すぐにまっさらな状態を復元することができる。やり方は→ VMware Fusion 6 Documentation Center

3. その後

その後私がやったのは…

ウィルス対策ソフトのインストール

とりあえずウイルスバスターの体験版を…

Google 日本語入力のインストール

USキーボードを認識させる

MacBook Pro の USキーボードを VMware Fusion に載った Windows7 に正しく認識させる | katz+

を参考にレジストリをいじった。

IME切り替えショートカットをcaps lock + spaceに変更

VMware上のWindows 8でもMacと同じようにCommand+スペースでIMEをオン・オフする方法を参考にしたが、私の場合はcaps lock + spaceで切り替えたかったので、手順は少し変わる。

前提条件 : Mac側の'システム環境設定>キーボード>修飾キー'でCaps LockキーとControlキーを入れ替える設定が済んでいること

  1. VMware Fusion 仮想マシン > 設定 > キーボードとマウス を開く。
  2. 'Mac プロファイル'をダブルクリックする。
  3. Mac ホスト ショートカット は有効にしない。
  4. 'キーマッピング'のタブを開き、'キーマッピングを有効にする'にチェックが入っていることを確認し、左下の'+'をクリックする。
  5. 移動元、移動先ともに ^ + Space にしてOKをクリックする。
  6. Google日本語入力IME切り替え設定は上の参考サイトの通りに。

Visual Studio 2013 Professionalのインストール

学生はDreamSparkから無料でダウンロードして利用できる。

Visual Studio Professional や Ultimate を無料で利用する方法 - マイクロソフト エバンジェリストのブログ

Office 2010のインストール

(2014年1月)Eclipse, Android開発環境構築(Mac)

未来の私のためにEclipseを使ったAndroid開発環境構築の最短手順を残しておく。ADT Bundleをダウンロードしてくるのが一番手っ取り早いが、今回はEclipse 4.3にしてみたかったのでEclipseSDKを別々にインストールする。

バージョン

1. Eclipseのダウンロード

Eclipse Downloads

の"Eclipse Standard 4.3.1"から"Mac OS X 64 Bit"をクリックしてEclipseをダウンロードする。

2. Eclipseのインストール

1でダウンロードした"eclipse-standard-kepler-SR1-macosx-cocoa-x86_64.tar.gz"をダブルクリックして解凍し、生成された"eclipse"フォルダを"アプリケーション"フォルダにコピーする。

3. Eclipseの日本語化

Pleiadesのダウンロード

Eclipse 日本語化 | MergeDoc Project

の"Pleiades プラグイン・ダウンロード"内の最新版"1.4.x"をダウンロードする。

フォルダのコピー

ダウンロードした"pleiades.zip"をダブルクリックして解凍し、以下の2つのフォルダを"eclipse"フォルダ内にコピーする。

eclipse.iniの編集

"eclipse.ini"の開き方

Finderから

"アプリケーション/eclipse"フォルダ内の"Eclipse.app"を右クリックして"パッケージの内容を表示"を選択する。"Contents/MacOS/eclipse.ini"をテキストエディタで開く。

ターミナルから
vim /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini

"eclipse.ini"に行を追加

"eclipse.ini"の最終行に次の1行を追加する。

-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar 

4. Eclipseを黒背景に変更

Eclipse Juno Darkをダウンロード

Downloads · Prototik/Eclipse-Juno-Dark · GitHub

から"Eclipse-Juno-Dark.zip"をダウンロードする。

ファイルをコピー

ダウンロードした"Eclipse-Juno-Dark.zip"をダブルクリックして解凍し、生成された"plugins/Eclipse_Juno_Dark_1.0.0.201208050344.jar"を"/Applications/eclipse/plugins/"にコピーする。

Eclipseをcleanオプションで起動

ここでやっとEclipseを起動する。

/Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean

途中でワークスペースの場所を聞かれるので、場所を設定してOKを押す。

テーマの設定

Eclipse > 環境設定 > 一般 > 外観

テーマで"Eclipse Juno Dark"を選択し、OKを押下する。

5. Eclipseのエディタの文字色を変更

カラーテーマのインストール

ヘルプ > 新規ソフトウェアのインストール > 追加 > 下記2項目を入力

名前 : color theme ロケーション : http://eclipse-color-theme.github.com/update

Eclipse Color Theme"にチェック > 次へ > 次へ > 同意します > 次へ > 完了 > OK > はい で再起動

テーマの設定

Eclipse > 環境設定 > 一般 > 外観 > 外観 > 色テーマ

"RecognEyes"を選択してOKを押下する。

6. Eclipseのその他の設定

行番号を表示

Eclipse > 環境設定 > 一般 > エディター > テキスト・エディター

"行番号の表示"にチェックを入れる。

デフォルトの文字コードUTF-8へ変更

Eclipse > 環境設定 > 一般 > ワークスペース

テキスト・ファイルのエンコードで"その他: UTF-8"を選択する。

キーボードショートカットを変更

Eclipse > 環境設定 > 一般 > キー

検索窓に"コンテンツ"と入力して"コンテンツ・アシスト"を探し、バインディングを"Command + Space"にする。

Javaのフォーマットを変更

Eclipse > 環境設定 > Java > コード・スタイル > フォーマッター > 新規

プロファイル名 : newline at end of file 次のプロファイルで設定を初期化 : Eclipse [ビルトイン]

OK > 改行 > "ファイルの終わり"にチェック > OK

7. Android SDK Toolsのインストール

Android SDK Toolsをダウンロード

Android SDK | Android Developers

の"USE AN EXISTING IDE"を開き、"Download the SDK Tools for Mac"をクリックする。

ファイルのコピー

ダウンロードした"android-sdk_r22.3-macosx.zip"をダブルクリックして解凍し、生成された"android-sdk-macosx"フォルダを"アプリケーション"フォルダにコピーする。

8. ADT Pluginのインストール

ADT Pluginをダウンロード

  1. Eclipseを開き、 ヘルプ > 新規ソフトウェアのインストール を選択する。
  2. 右上の"追加"をクリックする。
  3. "リポジトリーの追加"ダイアログで、名前に"ADT Plugin"を、ロケーションに"https://dl-ssl.google.com/android/eclipse/"を入力して"OK"をクリックする。
  4. "開発ツール"にチェックを入れて"次へ"をクリックする。
  5. "次へ"をクリックする。
  6. ライセンスを読んで"使用条件の条項に同意します"を選択し、"完了"をクリックする。途中でセキュリティ警告が出たら"OK"をクリックする。
  7. Eclipseを再起動する。

ADT Pluginの設定

  1. Eclipseが再起動したら"設定でAndroid SDKのロケーションが設定されていません。"というダイアログが表示されるので、"設定を開く"をクリックする。
  2. SDKロケーションに"/Applications/android-sdk-macosx"を入力して"OK"をクリックする。

9. SDK platform toolsとAndroid platformを追加

  1. Android SDK Managerを起動する。
  2. 以下のパッケージにチェックを入れ、"Install"をクリックする。
  3. "Accept License"を選択し、"Install"をクリックする。

最低限インストールするパッケージ

  • Toolsフォルダ内の最新のパッケージ
  • 最新バージョンのAndroidフォルダ
    • SDK Platform
    • Samples for SDK (必要最小限に抑えたいなら不要)
    • Sources for Android SDK (必要最小限に抑えたいなら不要)
  • Android Support Library

参考

(2013年12月)[Mac] MacBook Airの環境構築

iOSアプリの開発をやりたかったのでMacを買いました。 構成はこんな感じ↓

MacBook Air 11インチ

  • 1.7GHzデュアルコアIntel Core i7(Turbo Boost使用時最大3.3GHz)
  • 8GB 1,600MHz LPDDR3 SDRAM
  • 256GBのフラッシュストレージ
  • バックライトキーボード (US) + 製品マニュアル(日本語)

CPUがちょっと弱いかも…?

以下、未来の私のために環境構築の手順を書いていきます。(随時更新予定)

それにしても、MacBookのメタリックな外装はかっこいいと思うけど、冬は超冷たくて超辛いね。

シリアル番号

MacBook Airが入っていた箱にも書いてあったけど、念のため控えておく。

りんごマーク>このMacについて>詳しい情報 にシリアル番号がある

Doc

要らないアイコンを削除する

見た目がスッキリするし、目的のアプリを見つけやすくなる。

アイコンを右クリック(タッチパッドなら二本指クリック)>オプション>Dockから削除

これで以下のものを削除した。

Docを自動的に隠す

りんごマーク>Dock>"自動的に隠す"機能を入にする 画面最下部にマウスポインタをしばらく置いているとDocが出現するようになる。

キーボード

キーバックライトを消す

システム環境設定>キーボード>「環境光が暗い場合にキーボードの輝度を調整」のチェックを外す

F1~12キーを単独で使えるようにする

システム環境設定>キーボード>「F1,F2などのすべてのキーを標準のファンクションキーとして使用」にチェックを入れる

キー長押し時の入力速度を早くする

システム環境設定>キーボード>「キーのリピート」を一番早くし、「リピート入力認識までの時間」を一番短くする

Caps LockキーとControlキーを入れ替える

システム環境設定>キーボード>修飾キー

日本語入力ができるようにする

システム環境設定>キーボード>入力ソース>+>日本語>ことえり>追加 入力ソースの「カタカナ」と「英字」のチェックを外しておく

日本語入力切替キーをControl + Spaceにする

システム環境設定>キーボード>ショートカット>入力ソース> 「前の入力ソースを選択」をControl + Spaceに設定し、「入力メニューの次のソースを選択」のチェックは外す

Spotlightとショートカットキーが被るので、Spotlightの方のチェックを外す(私は使わないので)

セキュリティ

コンピュータ名を変更する

無線LANに繋ぐと、同じAPに繋いでいる人にコンピューター名が表示されるのが嫌。 システム環境設定>共有>コンピュータ名

ファイヤーウォールを有効にする

システム環境設定>セキュリティとプライバシー>ファイアウォールを入にする ファイアウォールオプション>「ステルスモードを有効にする」にチェックを入れる

とりあえずウイルス対策ソフトの体験版をインストールしておく

なんとなくウイルスバスター for Macの体験版にした。

Finder

隠しファイルを表示する

defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder

ファイルの拡張子を表示する

Finder>Finder環境設定>詳細>「すべてのファイル名拡張子を表示」にチェックを入れる

ズーム機能を有効にする

発表のときに便利。 システム環境設定>キーボード>アクセシビリティ>「ズーム機能」にチェックを入れる

使い方

  • ズーム機能のオンオフ  Option + Command + 8
  • 拡大  Option + Command + ^
  • 縮小  Option + Command + -

サウンド

効果音を消す

システム環境設定>サウンド>サウンドエフェクト>「ユーザーインタフェイスのサウンドエフェクトを再生」のチェックを外す

カレンダー

Web上のGoogle CalendarよりもMac標準アプリのカレンダーの方が使いやすい。 (予定を9:45開始にしたいとき、Google Calendarだとキーボードから45を入力しなければならない)

Googleアカウントの追加は、 カレンダー>アカウントを追加 からできる。

ブラウザ

Google Chromeをダウンロードする

SafariChrome ブラウザ‎を開いてダウンロード ダウンロードフォルダのgooglechrome.dmgを開き、Chromeアイコンをアプリケーションフォルダアイコンにドラック&ドロップ。

ChromeGoogleアカウントをひもづける

Chromeの初回起動時に開く画面でログインできる。

拡張機能

  • Gesture
  • Youtube広告非表示
  • TweetDeck

開発環境

Git

  • SourceTree

Free Mercurial and Git Client for Windows and Mac | Atlassian SourceTreeからダウンロードして、インストールする。

Android

  • ADT

Android SDK | Android Developers からADTをダウンロードして、アプリケーションフォルダにコピーする。

Eclipse 日本語化 | MergeDoc Project から最新版をダウンロードして、readmeのとおりにplugins、features ディレクトリーをコピーする。(Windowsのようにフォルダごとコピーして中身を消してしまわないように注意!)

eclipse.ini(Eclipse.appを右クリック>パッケージの内容を表示>Contents>MacOSにある)に、pleiades.jarの絶対パスを追加する。(今回はこのパスになった)

-javaagent:/Applications/adt-bundle-mac-x86_64-20131030/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

そして-cleanコマンドでEclipseを起動する。

/Applications/adt-bundle-mac-x86_64-20131030/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean
  • テーマ

白背景だと目が疲れるので、黒背景にする。

Dark Juno (Downloads · Prototik/Eclipse-Juno-Dark · GitHub) を導入する。手順はEclipseのテーマ - sonoshouのまじめなブログが詳しい。

iOS

その他

Dropbox

Skype

Evernote

KeePassX

https://www.keepassx.org/news/2013/12/420

AppCleaner

http://www.freemacsoft.net/appcleaner/

BetterTouchTool

Windows7のウィンドウをドラッグして画面の左右の端にぶつけるとウィンドウが半分のサイズになるやつ

Mou

Markdownエディタ

Sublime Text 2

MultiTextConverter

FileZila

FTPクライアント

Google日本語入力

ことえりの変換精度にイライラした

Android File Transfer

http://www.android.com/filetransfer/

(2013年12月)VMware Player上のCentOSにChaSenとCabochaをインストールした

環境構築って意外と時間がかかるのよね。

大学の自然言語処理で、形態素解析ChaSen係り受け解析器CaboChaを使う課題が出たので、そのための環境構築をしました。

要件

  • VMware Player上でCentOSを動かす
  • 設定変更やインストールに失敗したりしておかしくなったときに無かったことにできるようにスナップショット機能を導入する
  • ホストマシン(Windows)とファイルを共有できるようにする
  • 文字コードUTF-8とする(本当はEUC-JPにしたかったんだけど、CentOSのデフォルト文字コードをそれにするとVMware Playerが強制終了するからやむを得ず…)
  • CentOSChaSenとCabochaを使えるようにする

バージョン

  • VMware Player : 6.0.1 build-1379776
  • CentOS : 6.4
  • ChaSen : 2.4.5
  • ipadic : 2.7.0
  • iconv : 2.12
  • Darts : 0.32
  • CaboCha : 0.66
  • CRF++ : 0.58
  • MeCab : 0.996
  • MeCab-ipadic : 2.7.0-20070801

CentOS 6.4を仮想マシンにインストール

VMware Player上へのCentOSのインストールを参考に。

仮想マシンとホストマシンのファイル共有設定

VM上のCentOSとホストOS(Windows7)とでファイル共有したメモ - MofuMofuFarmを参考に。 VMware Toolsのインストールは必要なし。

共有フォルダには次のコマンドで移動できる。

cd /mnt/hgfs/share

Virtual Machineフォルダをまるごとコピーしてバックアップしておく

NHM(次のステップで導入)も不安定で、何かおかしくなったときにOSのインストールからやり直すのは嫌だから。

VMware Playerにスナップショット機能を付ける

VMware Playerへの簡易的なスナップショット機能を追加する方法についてのまとめ 【NHMのインストール方法及び使い方について】 : ネットセキュリティブログを参考にNHMのダウンロードと設定を済ます。以下、各ステップ終了毎にスナップショットを保存しておく。

CentOSの日本語化(UTF-8)

Server World - ネットワークサーバー構築を参考に。

形態素解析ChaSenのインストール

ChaSenのインストールにはiconvとDartsが必要なので、まずはそれから。そしてChaSenと辞書ファイルをインストールする。

libiconvのインストール

下記コマンドでシステムに既にインストールされていることを確認。

$ which iconv
/usr/bin/iconv
$ iconv -V
iconv (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
これはフリーソフトウェアです。利用許諾についてはソースをご覧ください。
商業性や特定の目的への適合性の如何に関わらず、無保証です。
作者: Ulrich Drepper.

Darts 0.32 のインストール

Acchannel あっチャンネル: 茶筌chasen-2.4.2, Darts 0.31, UniDic1.3.5のインストールを参考に。

$ cd /tmp
$ wget http://chasen.org/~taku/software/darts/src/darts-0.32.tar.gz
$ cd darts-0.32
$ ./configure

ここで次のエラーが出たので

checking how to run the C++ preprocessor... /lib/cpp
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details.

gcc-c++をインストールする。

$ su
# yum install gcc-c++

Dartsのコンパイルとインストールを再開。

# ./configure
# make
# make install

ChaSen 2.4.5 のインストール

wgetだとダメだったので、Firefoxhttp://sourceforge.jp/projects/chasen-legacy/downloads/56305/chasen-2.4.5.tar.gz/を開いてchasen-2.4.5.tar.gzをダウンロードしておく。

$ cd 
$ cd Downloads/
$ cp chasen-2.4.5.tar.gz /tmp
$ cd /tmp
$ tar xvzf chasen-2.4.5.tar.gz 
$ cd chasen-2.4.5
$ ./configure 
$ make check
$ su
# make install

ChaSen用の辞書を作成

インストール/Chasenのインストール | GETAssocを参考に日本語辞書ipadic-2.7.0をインストールする。

ChaSenの動作確認

ChasenをUTF-8環境で使いたい。 - 日常のメモ帳CentOSにChaSenをインストール - Scrap tmpcによれば、UTF-8の場合は毎回-iwオプションをつけなきゃいけないらしい。

$ vi test.txt
今日は雨でしたね。
$ chasen -iw test.txt
今日 キョウ 今日 名詞-副詞可能
は ハ は 助詞-係助詞
雨 アメ 雨 名詞-一般
でし デシ です 助動詞 特殊・デス 連用形
た タ た 助動詞 特殊・タ 基本形
ね ネ ね 助詞-終助詞
。 。 。 記号-句点
EOS

日本語係り受け解析器CaboChaのインストール

cabocha - Yet Another Japanese Dependency Structure Analyzer - Google Project Hostingに従ってインストールする。まずCRF++、MeCabmecab-ipadicをインストールしてからCaboChaをインストールする。

CRF++のインストール

CRF++: Yet Another CRF toolkitの'Installation'を参考に。

$ cd /tmp
$ wget https://crfpp.googlecode.com/files/CRF%2B%2B-0.58.tar.gz
$ tar xzf CRF++-0.58.tar.gz 
$ cd CRF++-0.58
$ ./configure
$ make
$ su
# make install

MeCabのインストール

MeCab: Yet Another Part-of-Speech and Morphological Analyzerを参考に。

$ cd /tmp
$ wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
$ tar zxfv mecab-0.996.tar.gz
$ cd mecab-0.996
$ ./configure --with-charset=utf8 --enable-utf8-only
$ make
$ make check
$ su
# make install

mecab-ipadicのインストール

$ cd /tmp
$ wget https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
$ tar xzf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure --with-charset=utf8
$ make
$ su
# make install

CaboChaのインストール

$ cd /tmp
$ wget https://cabocha.googlecode.com/files/cabocha-0.66.tar.bz2
$ bzip2 -dc cabocha-0.66.tar.bz2 | tar xvf -
$ cd cabocha-0.66
$ ./configure --with-charset=UTF-8
$ make
$ make check
$ su
# make install

でやったら次のエラーが出たので、

$ cabocha
morph.cpp(179) [charset() == decode_charset(dinfo->charset)] Incompatible charset: MeCab charset is utf8, Your charset is EUC-JP

いったん/tmp/cabocha-0.66フォルダを削除してから simplenlp/simplenlp/ja_cabocha/README.txt at master · commonsense/simplenlp · GitHubを参考に以下のようにインストールしたら成功した。

$ cd /tmp
$ bzip2 -dc cabocha-0.66.tar.bz2 | tar xvf -
$ cd cabocha-0.66
$ ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8
$ make
$ make check
$ su
# make install

使い方

$ chasen -iw -o outputfile inputfile
$ cabocha -n1 -o outputfile inputfile
$ cabocha -f1 -n1 -o outputfile inputfile

(2013年12月)[Android]ドラッグ&ドロップで入れ替え可能なGridViewを作る(書きかけ)

SDKには用意されていないから自分で実装しなければならない。なんて面倒なんだ…

以下、自分用の備忘録なので文章は雑です。(しかも書きかけ…ぼちぼち更新します)

仕様

こんな感じにしたい。

  • Itemをロングタップすると選択状態になり、Itemが少し拡大される
  • 選択状態のItemはドラッグできる。ただし自動スクロールは実装しない
  • ドロップすると、その位置に一番近いマスに配置される(縮小アニメーションで元のサイズに戻りながら)。このとき、空いたマスを詰めるために、それ以降のItemが順番を保持しながら1つ前のpositionに移動する(並べ替え)。この並べ替えはアニメーションで。
  • ドラッグ中も並べ替えアニメーションをやる

実装上のポイント

  • touch eventの取得
  • GridViewにセットしているデータの並べ替え処理
  • アニメーション

実装例を調査

ググるといろんな人がいろいろ努力した結果が出てきて涙ぐましいよ。 でもいろんな人がいろいろな方法で実装してるから混乱してしまった… そんなわけでちょっとまとめてみようと思う。

Drag-Drop for an Android GridView | More Is Not Always Better

下記のPart1~3でドラッグ&ドロップの基礎部分を解説し、この記事ではそれらをGridViewに組み込んだコードを紹介している。ソート機能は無い。

Moving Views in Android – Part 1 | More Is Not Always Better

Moving Views In Android – Part 2, Drag and Drop | More Is Not Always Better

Moving Views In Android – Part 3, Drop Zones | More Is Not Always Better

Drag-Drop for Android GridView (V4) | More Is Not Always Better

上の記事のドラッグ&ドロップ部分をAndroid support v4版に書き換えたもの…?

Androidでドラッグアンドドロップ (フェンリル | デベロッパーズブログ)

2012年4月の記事なので、Android3.x系うんぬんの話はちょっと古い。ソースコードの概要部分のみしか示されていないので、実装部分は自分で調べて書く必要あり。ただ、ドラッグ&ドロップでソート可能なGridViewはどうすれば実現できるかおおまかに把握できる良い記事。

  • タッチイベント

Android3.x系の例としてOnDragListenerでドラッグ&ドロップを実現している。 Android2.x系ではonLongClickとonTouchを使ってドラッグ&ドロップが実現できることを紹介。

  • データのソート

mContainer.addView(mDragView, pos);の部分がViewの並べ替えに相当するんだけど、mContainerが何のクラスなのかわからない。

  • アニメーション

親のViewGroupにLayoutTransitionをセットすることでアニメーションさせている。

visible true: 【Android2.2以上】 GridView,ListViewでドラッグ&ドロップ、自動スクロールもする。動画もあるよ。

AbsListViewならなんでも(GridViewもListViewも)対応可能というビックリな例。その発想は無かった!ただ、ドラッグ&ドロップ部分とソート部分をLinearLayoutの子クラスに実装しているのがちょっと気持ち悪いかも。

  • タッチイベント

LinearLayoutの子クラスSortableListViewLayout(GridViewを子Viewに持つ)にonItemLongClickとonInterceptTouchEventのリスナーをセット。onInterceptTouchEventについては次の記事がわかりやすい。

Androidあれこれ: 子Viewのタッチイベントを取得する

"子Viewの実装の有無に関わらず、親となるViewGroupでタッチイベントを取得したい時ってありますよね。 そんな時に便利なのがViewGroup#onInterceptTouchEventというメソッド。"

  • データのソート

SortableListViewLayoutにAdapterもデータも保持していて、ドロップ時にデータを直接入れ替えて、AbsListView.invalidateViews()でデータ更新を画面表示に反映させる。

  • アニメーション

ドラッグ開始時に選択したItemのゴーストを作成し、そのゴーストをドラッグさせるタイプ。ゴーストはImageViewで、選択したItemのDrawingCacheをセットする。WindowManager.addViewでゴーストをSortableListViewLayoutに追加し、WindowManager.LayoutParamsのx,y座標を弄ってWindowManager.updateViewLayoutでゴーストの配置を更新する。

GridViewなどのAbsListViewの項目をドラッグ&ドロップで入れ替える - JDBな人生

mrKlar/PagedDragDropGrid · GitHub

複数ページを切り替えられる機能は今回は必要ないので読み飛ばす。ドラッグ&ドロップの動作は遅延も変な挙動も無く、完璧でとても参考になる。

ただ、ページ切り替え機能を実装したり、GridをViewGroupのサブクラスで作り直して、アダプターのセットやビューの追加・配置まで実装したりしているためか、コードがとても複雑。

  • タッチイベント

ViewGroupを継承したDragDropGridのコンストラクタはOnTouchListenerとOnLongClickListenerを自身にセットする。onTouchでACTION_DOWN,MOVE,UPを、onLongClickでロングタップを検知する。ACTION_UPではドロップ後の処理だけでなく、アイテムがタップされた場合にOnClickListenerのonClickを呼び出す処理もする。

  • データのソート

ポジション情報をDragDropGrid内のSparseIntArrayに保存しているっぽい。これは、TranslateAnimationではViewの実体は移動しないため、ドラッグ中にどのItemがどこのマスにあるのかGridView側で把握していなきゃならないから、かな。アイテムデータ自体の入れ替えはAdapterのswapItemsメソッド(独自interfaceで定義)で行う。

  • アニメーション

選択時の拡大アニメーションはScaleAnimationをViewに適用。移動時はACTION_MOVEが呼ばれるたびに選択状態のViewのlayoutメソッドを呼び出して、指の位置に再配置する。入れ替え対象のViewはTranslateAnimationで移動アニメーションを実現する。ドロップ時はView.clearAnimationでアニメーションをキャンセルするだけ。

ドラッグ&ドロップで並べ替え可能なListViewの実装例

今回はGridViewだけど、ListViewも兄弟なので同じようなもん。

2010-07-18 - @vvakame の日記

日本語記事で初出なのかな?偉大なる先人ですね。

ユーザがソート可能なListViewをすこしリッチにしてみた - 明日の鍵

ドラッグ&ドロップで並び替えできる ListView - パンダのメモ帳

上2つの記事をもとにしたコードだそうな。

Android Developersで参考になるページ

やっぱり公式ドキュメントが一番頼りになるよね。英語だけど。

その他に参考になりそうな記事

Androidでドラッグ・アンド・ドロップ - hidecheckの日記

"Canvasを使わないでドラッグアンドドロップする方法"

Drag and Drop を使う

"まず、上下に2つの GridView ベースのカスタムビューを用意します。その中に予め5つのアイテムを配置します。これらのアイテムは Drag and Drop で上下の View を行き来させることができます。"

Android開発のメモ: 12月 2010

"座標系について"

ドラッグ&ドロップで入れ替え可能なGridViewを作ってみた

// まだ作ってない…

ThinkPad X220に英語配列のUSBキーボードを繋げた話

私の愛用ノートPCはThinkPad X220で、キーボードは当然 日本語配列なのですが、最近始めたインターンでは英語配列のMacBookProを使っていて、家に帰ってThinkPadでプログラミングしようとすると頻繁にミスタイプするようになりました。そこで、ThinkPadのキーボードを英語配列にしたい!ついでにHHKとか高級なキーボードを買っちゃいたい!とか思って探してはみましたが、ちょっと踏ん切りがつかなかったのでとりあえず安物キーボードを買ってみました。買ったのは

 

iBUFFALO フルキーボード USB接続 英語配列 107キー ブラック BSKBU02ENBK

http://www.amazon.co.jp/gp/product/B0049P2J3I/ref=oh_details_o00_s00_i00?ie=UTF8&psc=1

http://buffalo.jp/products/catalog/supply/input/keyboard/wire/bskbu02en/

 

763円ですよ、安っ!

でも安さゆえか使い心地は良くないです。全体的にキーが重くて、特にスペースキーなんかは激重で、タイピングしていると手が疲れます。

 

それでこのキーボードをThinkPadにUSB接続すると、自動的にドライバがインストールされて使えるようになりはしましたが、英語配列ではなく日本語配列の入力になってしまいました。

OSを再起動したら英語配列で入力できるようになったのですが、今度はThinkPad本体のキーボード、トラックポイント、クリックボタン、タッチパッドが反応しなくなりました。

デバイスマネージャーを覗いてみると、

 

キーボード

- HIDキーボードデバイス

- 標準PS/2キーボード

 

マウスとそのほかのポインティングデバイス

- HID準拠マウス

- ThinkPad UltraNav Pointing Device

 

のうち「標準PS/2キーボード」と「ThinkPad UltraNav Pointing Device」に黄色い!マークが付いていました。そのプロパティを見てみると

 

このデバイスのドライバー (サービス) は無効になっています。代わりのドライバーによりこの機能が提供される可能性があります。 (コード 32)

 

とのメッセージが…

USBキーボードのドライバをインストールしたときにレジストリをいじられちゃったんでしょうか?

 

http://qa.support.sony.jp/solution/S1011301083507/#qatopic_chapterAnswerContents_sectionHowto_webstep4

を参考に上記の「標準PS/2キーボード」と「ThinkPad UltraNav Pointing Device」を右クリック>削除でいったん削除し、本体を再起動してみたら、ThinkPadのキーボードまわりが復活しました!

でもThinkPadのキーボードが英語入力になっちゃってます…まあ別にいいかな。