2014年10月31日金曜日
SwitchCompat の inflate でエラー: android.view.InflateException: Binary XML file line #147: Error inflating class SwitchCompat
レイアウト用 xml での宣言を SwitchCompat ではなく android.support.v7.widget.SwitchCompat とフルパスで指定したら解消しました。
Android : NumberPicker の Divider の色を変える
こんな感じに、緑色にしてみました。
java.lang.reflect を使って NumberPicker の mSelectionDivider に独自の drawable を設定することで実現します。
Class<?> numberPickerClass = null;
try{
numberPickerClass = Class.forName("android.widget.NumberPicker");
} catch (ClassNotFoundException e) {
Log.e(LOGTAG, e.toString());
}
if(numberPickerClass != null){
java.lang.reflect.Field selectionDivider;
try {
selectionDivider = numberPickerClass.getDeclaredField("mSelectionDivider");
selectionDivider.setAccessible(true);
Drawable drawable = getResources().getDrawable(R.drawable.numberpicker_selection_divider);
selectionDivider.set(number_picker, drawable);
} catch (NoSuchFieldException e) {
Log.e(LOGTAG, e.toString());
} catch (IllegalAccessException e) {
Log.e(LOGTAG, e.toString());
}
}
drawable には元の drawable のように右のような 9.patch を使っています →

広告 : 良いAndroidアプリを作る139の鉄則
2014年10月30日木曜日
AndroidStudio : Could not find property 'Compile' on project ... の解決方法
tasks.withType(Compile) {
options.encoding = 'UTF-8'
}
build.gradle の上記の記述の
Compile を JavaCompile に変更したら治りました。
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
Android Studio をアップデートして Gradle のバージョンも上がったのですが、
Gradle 2.0 から Compile オプションは廃止されたようです。
2014年10月27日月曜日
__attribute__((naked)) の意味:prologue コードと epilogue コードを生成しない
__attribute__((naked)) void Wait10Cycles(void){
asm (
/* bl to here: [4] */
"nop \n\t" /* [1] */
"nop \n\t" /* [1] */
"nop \n\t" /* [1] */
"bx lr \n\t" /* [3] */
);
}
ある場所で見かけた「何もせず待つ」という関数の中身を調べたところ↑のようになっていたので _attribute__((naked)) の意味について調べたことをメモしておきます。
参考 : Declaring Attributes of Functions
This attribute is available on the ARM, AVR, MCORE, MSP430, NDS32, RL78, RX and SPU ports. It allows the compiler to construct the requisite function declaration, while allowing the body of the function to be assembly code. The specified function will not have prologue/epilogue sequences generated by the compiler. Only Basic asm statements can safely be included in naked functions (see Basic Asm). While using Extended asm or a mixture of Basic asm and “C” code may appear to work, they cannot be depended upon to work reliably and are not supported.まとめると
- コンパイラに関数定義を作成させつつ、関数の中身は assembly コードで書ける
- prologue コードと epilogue コードが生成されない
- 関数内で安全に使用できるのは Basic asm のみ。拡張アセンブラ構文(Extended asm)や Cコードも動くように見えるかもしれないがサポートされていない。
Prologue コード(プロローグコード)とは
関数の先頭で、関数内で使用するスタックやレジスタの準備を行うコードのことEpilogue コード(エピローグコード)とは
関数の終わりで、スタックやレジスタを関数が呼ばれる前の状態に戻すコードのことFunction prologue(英語版 Wikipedia へのリンク)
2014年10月26日日曜日
AQM0802A を FRDM-KL25Z + CodeWarrior 環境で使用する
秋月で I2C接続小型LCDモジュールピッチ変換キット (AQM0802A-RN-GBW ピッチ変換基板付き)を購入して、FRDM-KL25Z と接続して表示してみました。
紆余曲折ありつつ、最終的にはなんとか表示できたので、ハマったところのメモを残しておきます。
以下にコードをベタ貼りしておきます。
(※ I2CMasterHelper_***、BusyWait は別の場所で定義した関数なので、このままでは使えませんが、参考程度に。)
紆余曲折ありつつ、最終的にはなんとか表示できたので、ハマったところのメモを残しておきます。
- CodeWarrior (Processor Expert) の設定で入力する I2C スレーブアドレスは 0x7C ではなく 0x3E
- 0x3E は 0x7C >> 1。アドレス部と Read/Write 部を独立して扱っているので、シフトしておく必要があります。
- 初期設定例だと表示されない
- コントラストの設定(初期化手順 4 番目)を例の 0x70 から 0x7f に変更すると見えるようになりました。
- 供給している電源電圧の問題かもしれません。電源入力には FRDM-KL25Z の 5V 出力端子からの電圧を TA48033S で 3.3V にして使用しました。
- 初期化コマンド間で Wait する
- 長い時間が指定されている Wait の時間は 26.3uS ということで、特に気にしないで連続でコマンドを発行しても発行にかかる時間で Wait 時間がまかなえるかと思ったのですが、たまに通信に失敗することがありました。他の原因かもしれませんが、とりあえずコマンドの間に長めの Wait(1ms) を入れることで安定しました。
また、Control Byte の Co が若干わかりにくかったのですが、表示したい文字列を送る場合は 0 にして、それ以外の場合はコマンド1つ毎に STOP コンディションを発生させれ Co は 0 でも 1 でも良い、という扱いで良さそうです。コマンド間で Wait も必要なようですし。
仕様書には「データを複数送る場合 Co = 1 で、」とありますが、これは間違いですね。少なくとも Co = 0 にして文字列を送ることはできました。
(※ I2CMasterHelper_***、BusyWait は別の場所で定義した関数なので、このままでは使えませんが、参考程度に。)
#include "AQM0802A.h"
#include "I2CMasterHelper.h"
#include "PE_Types.h"
#include "PE_Error.h"
#include <stdio.h>
#include <string.h>
// co = 0 : Last Control byte to be sent. Only a stream of data bytes is allowed to follow.
// co = 1 : Another Control byte will follow the data byte (unless a STOP condition is received)
// rs = 0 : Send Command
// rs = 1 : Send Data
static byte ControlByte(bool co, bool rs){
return (co << 7) | (rs << 6);
}
static void SendCommand(byte cmd){
byte data[2];
data[0] = ControlByte(FALSE, FALSE);
data[1] = cmd;
I2CMasterHelper_SendBlock(data, 2, LDD_I2C_SEND_STOP);
I2CMasterHelper_WaitSendComplete();
BusyWaitMS(1);
}
void AQM0802A_Init(){
// 0x0011_1000 : DL = 1 : 8bit-bus mode, N = 1 : 2-line display mode, DH = 0 : font size is 5 x 8, IS = 0 : normal instruction
SendCommand(0x38);
// IS = 1
SendCommand(0x39);
// Internal OSC frequency : 1/4 bias
SendCommand(0x14);
// Contrast Set : 000
SendCommand(0x7f);
// Power/ICON/Contrast control : ICON display off, Booster circuit on, contrast 10
SendCommand(0x56);
// Follower control : follower circuit on, follower amplified ratio = 100
SendCommand(0x6C);
// wait 200ms for power stable
BusyWaitMS(200);
SendCommand(0x38);
// Display on, cursor off, cursor blink off
SendCommand(0x0C);
// Clear display
SendCommand(0x01);
// TODO: wait 1.08ms
BusyWaitMS(2);
}
// first line address is 0x00 ~ 0x07
// second line address is 0x40 ~ 0x47
void AQM0802A_DisplayChr(byte addr, char ch){
// Test for now;
byte data[4];
// Set Address
data[0] = ControlByte(TRUE, FALSE);
data[1] = 0x80 | addr; // the first bit is always 1.
// Set Character
data[2] = ControlByte(FALSE, TRUE);
data[3] = ch;
I2CMasterHelper_SendBlock(data, 4, LDD_I2C_SEND_STOP);
I2CMasterHelper_WaitSendComplete();
}
void AQM0802A_DisplayStr(bool secondline, char* str){
byte data[11];
byte length = strlen(str);
if(length > 8){
length = 8;
}
// Set Address
data[0] = ControlByte(TRUE, FALSE);
data[1] = 0x80 | ((secondline == TRUE)?0x40:0x00); // the first bit is always 1.
// Set data
data[2] = ControlByte(FALSE, TRUE);
memcpy(data + 3, str, length);
I2CMasterHelper_SendBlock(data, length + 3, LDD_I2C_SEND_STOP);
I2CMasterHelper_WaitSendComplete();
}
void AQM0802A_ClearDisplay(){
SendCommand(0x01);
}
2014年10月25日土曜日
ゲームで英語:スーパーダンガンロンパ2(Danganronpa 2 Goodbye Despair)
前作の英語版(Trigger Happy Havoc)につづいて、
2 も英語版 Danganronpa 2 Goodbye Despair(北米版) を買ってプレイしました。
前作についての記事はこちら:ゲームで英語:ダンガンロンパ
英語勉強のネタとしての使い勝手は、前作と変わりはありませんがやはり良いです。詳しくは前作についての記事をどうぞ。
- 会話形式のわかりやすい文章
- 田中眼蛇夢は除く
- フルボイスの学級裁判
- テキストと同じ内容なので完全に聞き取れなくても安心
- バックログ機能
- 少し読み飛ばしてしまっても大丈夫
- スクリーンショット
- PS Vita の本体機能ですが、全くもって素晴らしいです。3DS にもこれがあれば、逆転裁判英語版が捗るのですが…。
もちろんクリア後はアイランドモードや IF小説もあるのでボリュームも十分。
日本語でやる場合とくらべて、本編のミニゲーム、特にアナグラムが少し難しくなりますが、思いつかないような単語が出てくることはないので、英語版をプレイしようという気が起きる人であれば、詰まって進めなくなるということはない…はずです。少し問苦戦しましたが…。
各キャラクターのボイスも、1 と同じく良い感じ。
イメージと違い違和感を感じ続けるようなキャラクターはいなかったです。
特に罪木蜜柑の声の人が雰囲気あっていて上手いなーと思ったのですが、ステファニー・シェーさんというベテランの方みたいですね。ウサミの中の人(レベッカ・フォースダットさん)もすごいキャリアの持ち主っぽいです。北米の人も、日本の人が日本版の声を楽しんでいるのと同じくらい、英語版の声を楽しめるようなキャストになっているとしたらファンとして嬉しいものです。
まだ本編と IF小説だけしか見ていないので、これから各キャラクターの自由時間会話やスクールモードを楽しもうかと思います。
なんだか英語版のキャストの Wikipedia を見ていたら、他のゲーム・アニメの英語版をやる欲も湧いてきました。
ラベル:
ゲーム,
ゲーム・漫画・アニメの英語,
英語
『Big Little Lies』 感想
久々に洋書の小説を読みました。Big Little Lies。サンプルを Kindle に送ろうとしたら間違って購入をしてしまったのですが、せっかくなのでと読み進めて、そのまま読了。最近の洋書小説の安さを考えると少し高い買い物だった気がしますが、とりあえず楽しめたので何よりでした。
3人の、子供を持つ女性を主人公に、家庭内暴力、離婚と再婚、子育て、シングルマザーなどの話題に触れながら、Trivia Night というイベントで起こる事件に向けて物語が進みます。
構成が面白かったですね。章の間などに挟まる登場人物の会話から、Trivia Night というイベントで何らかの悲劇が起こることが初めの方でわかるのですが具体的に何が起こったかはそこではわかりません。そして物語の章立てが 「Trivia Night の何ヶ月前」 という形で進んでいくので、どんな悲劇が起こるんだろう?と想像しながらカウントダウンを進めるような感覚でした。
実際に起こった事件は、悲劇ではあるものの、良くも悪くも妥当な感じで刺激は少なかったのですが、そこに至るまでの、人間関係や心理描写を楽しました。
英語的にも、よくわからない言い回しは少なく読みやすかったです。
同じ作者の本をまた読みたいかと尋ねられれば、「面白かったけど、作者買いするほどではないかな」、というライン。ひとまず次の作家を探そうと思いますが、機会があれば買うかもしれませんね。
登録:
投稿 (Atom)

