2015年8月3日月曜日

【Android】勝手に背景色が変わってしまうパティーン

実は前回の記事を書いた頃から職場が変わって
前職ではメーカーで開発を行っていたが
今はサービス系の企業でAndroidアプリのコーディングを行っている.

前職は結構お堅い企業で仕様書とか依頼書とかが(鬱陶しいくらい)きっちりしてたんだけど
現職ではそういったところがちょっと抜けている.
どっちがいいのかは人次第なんだろうけど,
ソースコードのたらい回しもひどい.
その分,いろんな人のコーディングを1つのソースで見れるわけではあるが…

こういう実装方法があるのか!
があれば当たり
フフッなんでこんな実装してるの
ってのはまだいい方で
実際は拡張性のないゲロリンチョなソースコードになってたりする.

前置きっていうか愚痴はそこまでにしておいて,
今回謎な現象にブチ当たってしまったのでその解決方法をメモとして残しておく.
普通はこんな書き方しないだろって方法で起こった現象なのではあるが。。。
役に立つのだろうか.

現象は
Fragment内においてあるViewの背景色が勝手に変わってしまう
っていうもの.
View3つ(仮にA, B, Cとする)の背景色がFragment再描画と同時に変わってしまった.
これらのViewはレイアウトXMLで背景色を指定してあり,
3つとも同じ色を指定してある.
ソースコード上では一切背景色をいじっていない.
しかも再現するのは確認したところではAndroid4.04の端末のみ.

早速原因なのだが,
このA, B, Cの他にレイアウト上で同じ背景色を指定しているView Dがあり,
ソースコード上でこのView Dの背景色を変更しているのであった.
View Aの背景色だけ1ずらしてみるとView Aだけ影響を受けなくなった.

View Dの背景色変更がなぜ他のViewに影響するかは謎なのだが,
その背景色変更の書き方は綺麗ではない書き方をしていた.

具体的には
viewD.setBackgroundColor (Color.parse (getString (R.color.hoge)));
すごいよね,Colorリソースを文字列として取得して
それをColorオブジェクトにパースして
背景色に指定してある.

コードを見ると背景色に限らずこの書き方が散見された.

普通は
viewD.setBackgroundResource (R.color.hoge);
リソースが指定できないTextViewの文字色指定とかには
textView.setTextColor (getResource ().getColor (R.color.hoge));
と書くべきであり,

試しにそう書きなおしていくと現象の発生はなくなった.


上がってくる不具合報告,前任以前の既存ばかりで
ある意味勉強になる.
けどゼロから作り直したい感がすごい.

2015年6月22日月曜日

AppCompat does not support the current theme features

java.lang.IllegalArgumentException: AppCompat does not support the current theme features
 
とか怒られた。
 
いろいろ調べてみると
AppCompatではDialogがサポートされてまてん
だとか
ActionBarを非表示にしないといけまてん
だとか
色々書いてあっていろいろ試したんだけど
原因が全然違ったので備忘録

原因はActivityのonCreateでsuper.onCreateを呼び出していないこと
自動で補完されてるはずなのに消してたみたい

同じ過ちを犯してるおっちょこちょいさん向けでした

2015年1月7日水曜日

【雑感】3DS LLからnew 3DS LLに買い替えた

※注意
この記事はいつも以上に主観的内容とクソの山が大半を占めております.
効果には個人差があります.
用法・用量を守って正しくお使いください.
責は負いかねます.


この年末年始に実家に規制した時にとうとうnew 3DS LLを買ってしまった.
前から気になっていたものの,
・Cスティックなんか使わないし
・カラー赤がないし
・ZL,ZRを使うこともないし
・本体赤が選べないし
・3D機能もほぼ使わないし
・着せ替えもいらないし
・NFC?何に使うんや?
・赤がない
といった理由から
3DS LL()があるから特に買い換える必要性もないよなぁと思っていた.

3DS(LL)ユーザーがnew 3DS(LL)を見ると大体こんな印象を持つと思う.
欲しいけど買い換えるほどでもない,と

甘いですよ.そこのアナタ.
↑誰かが言ってたからこの1句使ってみたかっただけ.

軽く他のレビュー記事見てきたけど
こいつ本当にゲームやったのかと問いたくなるようなものがある.
ただの公式発表文なぞっただけじゃねーかと.
ちゃんと使ってみてこそ違いが見えてくる.

先も書いたけど
NFC機能→使わない
画面照度自動調整機能→ゲームには不向き
Cスティック,ZL,ZRボタン→使わない/そもそも対応していなくて使えない
3D機能の強化→強化されたとはいえゲーム時はオフにするのが基本
これは一般的な感覚からはそう外れていないと思う.

↑これに出てこない性能UPがいろいろとあるのです.
先に言っておくと,買ってよかったわ.
GKがいうのもなんだけど.

GKとはソニー信者という意味の蔑称.
詳しくはググれ.
モンハン次作はVitaとPS4マルチで出て
セーブデータはPSPlusで共有して外ではVita,家ではPS4.
当然Vita,PS4問わず通信可能
という仕様で出てくれ
と思ってるくらいにはGKなのである.


本筋に戻して
ここからは時系列順に書いていこうと思う

まず開梱.
表面のデザインはマットだった旧から変わって反射タイプに.
旧は旧で指紋が目立ったけど,newも指紋が目立つタイプ.
まあいいか.

側面を見渡すとコネクタやボリュームの配置が凄まじく変わっている.
背面中央にあったカートリッジ挿入口は前側面左に来ている.
何らかの意図があるのだろうか?
子供も持つものだから対戦中に不利になった友達が
カートリッジを抜こうとするのを防ぐとか?

カートリッジ挿入口の場所が変わるのはいいけど
イヤフォンコネクタの位置が前側面左端だったのが前側面中央になった
これはちょっと個人的に△
ヘッドフォンをさしたままポケットに入りにくくなった.
もう一点,スタイラスの格納場所が右側面から前側面になったけど
たぶんこれも取り出しにくくなってるので△
と言いたいけど,スタイラスなんてまず使わないからどうでもいい.

また,右側面にあったSDカードスロットが見当たらない.
なんと下パネルの内側にある.
更に下パネルを外すためにはドライバーが必要なため,簡単に入れ替えできなくなった.
これもそう入れ替えるような使い方しないならどうでもいいことだけど.

そしてSDカードではなくmicroSDになっているのは注意.
これは事前に知っておかないと本体を買ってからmicroSDを調達しに行くハメになる.
つまり本体買ったはいいがすぐに使えない事態が発生する.
幸いにもSurface PRO3に使っていない32GBのmicroSDをさしていたおかげで助かったけど.
下パネルを外すのがちょっと手間取った


電源を投入.
工場出荷状態でバッテリーにはある程度充電されているようで
即電源が入った.
なお,電源ボタンも本体前側面に移動しているが,
本体よりでっぱっていないし,大きさ自体も小さめなため
誤操作で電源を切ってしまったとかはならなさそうなデザインになっている.

なにより,操作面にあったほうが誤操作は起こっていたため
電源ボタンを操作面から外したのは◯だ.

電源を投入したはいいが,画面照度がチラチラうざい.
この時初めて知ったのだが,newには明るさ自動調整機能が追加されている.
スマートフォンなどでよくあるアレだ.
うざいからすまないが即オフ.もちろん設定でオフにできる.


さて,旧LLからnew LLへ買い替えたとなるとまず行うのが
データの移行.
データの引越しという設定があるのだが,それを行うと
・購入済みダウンロードゲームの引越し
・eショップの設定
・本体設定
等々旧LLのデータをそのままnew LLへ移行できる.
ケーブルもいらない.ローカル通信でできるのだ.
ただし,旧LLはデータを消去されるので
両方を使っていくのが困難であるとともに

電源ケーブルが2本ない場合は事前に新旧ともに満充電でないと
移行途中で電源が落ちて取り返しの付かない事態になるかもしれない.
なお,ダウンロード済みゲーム6本を移した結果
2時間以上全データの移行にかかったことを追記しておく.
電源ケーブルが1本しかなかったので都度付け替えてた.
なお,SDカード,microSDがそれぞれ扱えるPCが手元にあるなら
PCを使ってデータ移行をすることもできるので,その場合は時間が短縮されるかもしれない.しらない.


なに
ここまで苦労したこととかネガティブなことばっかじゃんって?
こっからだよ


モンスターハンター4Gしかやってないから
動作環境はそれだと思っていただきたい.

一番最初に改善したと感じた点が
ボタン配置ね.
さっき電源ボタンの移動が◯といったけど
以前旧を使ってる時にスタートボタンと押し間違えて電源を切ったことがあったんだ.
同様にHOMEボタンもスタートボタンと押し間違えたことがあったんだけど
HOMEボタンとスタート・セレクトボタンの配置が遠くなった.
HOMEボタンが十分小さくなった.
これは先の事例での誤操作がなくなるといっていいレベルの改善.
ただし慣れるまでスタートボタンを押すのに手間どう.
慣れればいいだけのハナシ.
初めてクシャルダオラ討伐したのに誤操作でセーブ前にゲーム終了するなんかより全然いい.
そういうことだよ!


そしてこれが一番大きな改善点だと思うのだが,
実行速度の向上.
これはゲーマーなら買い替えてもいいんじゃないかと思うくらい.
HOME画面からゲームの開始がまず速い.
同じくゲーム画面からHOME画面への移動も速い.
旧LLではゲーム終了時に「しばらくお待ちください」なんて画面が出てたけど
これが出なくなった.

これだけじゃない.
ゲーム中の実行速度も上がっている.
クエスト中にアイテムボックスからアイテムを取り出すときに
ひっかかる感じがあったのが取れた.
また,武具ボックスの整理でも
旧LLではソートするのに1秒程度かかっていたのがなくなった.
マップのロード・クエストのロード時間も短縮されている.

このあたりはやってみないとわからないけど
やってみるとすぐわかる.


最後にもう一点改善したと感じる点が
上画面のグラつき.
旧LLは開いた状態で本体を振ると
上画面がグラグラしてそれで遊んでたものだが,
newLLではほぼグラつきがなくなった.
ゲームプレイ時に画面がガタガタしないのはいいことだ.
ヒンジ部が固くなっている印象.


コレは好みの問題だが
固くなっているといえば
音量と3D機能のスライドボリューム,
こいつらのトルクが上がっている.
本当にこれは好みの問題.


その他の変更点にも触れてみる.

まずCスティックに関して.
まあモンハンだし?一度触ってみよう,と.
これは拡張スライドパッドの代わりにはならないと思う.
拡張スライドパッド使ったことないけど.
そもそもこれはスライドパッドではないし,
アナログスティックでもない.
ThinkPadやVaio typePのキーボード中心にあるトラックポイントと同じやつ.
視点移動は十字キーでできるから別にいいかな.


3D機能が強化された点についても言及すると
視差に合わせて?描画位置を変えているのか
旧LLではちょっと位置がずれると3Dに見えなくなったのが
newLLでは追従してくれるようになった.
それに合わせて前の方にあるオブジェクトと後ろの方にあるオブジェクトとで
言い方が難しいが顔を動かした時に位置が変わって見える

あるオブジェクトの真後ろにあるオブジェクト,
正面から見ると隠れて見えないのだが
ちょっと横から見ると見えるようになる.

つまるところ,回り込めるようになった.
これは確かに強化だわ.(ほとんど使わないけど…)

なお,画質は良くなっていません.当然です.


以上,new 3DS LLを買って一週間程度たった雑感.
なお,買い替えた理由は
親にDSiをあげると言っていたが3回連続で帰省時に持って帰るのを忘れたため
めんどくさくなって今持ってる旧LLをあげて自分はnewLLにしようと思ったため.
旧LLは親の手に渡りましたとさ.