2012年10月29日月曜日

[Android]ListViewのlistSelectorを使ってタップしたときに色を変える

ListViewのアイテムを選択されたときに色を変える方法は、<selector>を用意してその子要素にタップしたときの色を指定するitemはandroid:state_pressed をtrueにしたものを用意し、選択していないときの色はデフォルトの色で行います。

ここで、
ListViewのアイテム選択にはバグがあるようです。
listSelectorを下記のようにすると、リストのアイテムを選択したときに
Android2.xだと選択行以外も選択されてしまいます。(Android4.xではこの現象はおきません。)

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  2.      <item android:state_pressed="true">  
  3.          <color android:color="#FFFFFF">  
  4.      </color></item>  
  5.      <item>  
  6.          <color android:color="#000000">  
  7.      </color></item>  
  8.  </selector>  

ここでは、私は何も考えずにcolorを使ってしまったのですが、shapeを使って色を指定すれば回避できるようです。
  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">  
  2.     <item android:state_pressed="true">  
  3.         <shape android:shape="rectangle">  
  4.             <solid android:color="#FFFFFFc">  
  5.         </solid></shape>  
  6.     </item>  
  7.     <item>  
  8.         <shape android:shape="rectangle">  
  9.             <solid android:color="#000000">  
  10.         </solid></shape>  
  11.     </item>  
  12. </selector>  
ちょっとはまりました。
ご参考までに。


2012年10月27日土曜日

Blogを放置しすぎた

このBlogを書くのをすっかり忘れていてずっと放置していたのですが、 少しずつ書こうと思います。

2012年4月1日日曜日

"Webエンジニアのためのデータベース技術[実践]入門"を読みました。

Webエンジニアのためのデータベース技術[実践]入門 読みました。
インデックスのような基礎的なところから、
NoSQLのような新しい技術の解説や、
MySQLのソースコードの読み方といった深い解説もあり、
データベースに関しての基礎は一通り学べる本であると思います。

SQLの構文の解説のような超初心者向けの解説はありませんでしたが、
データベースに苦手意識があった自分としてはとても勉強になりました。
データベースの基礎を身につけるにはこの1冊で十分なのではないかと思いました。

C言語で二分探索木を書いてみた。

C言語で二分探索木を書いてみた。 所要時間1時間。 あってる?
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct sNode Node;
struct sNode {
int value;
Node *left;
Node *right;
};
Node *create_node(int value) {
Node *node = (Node *)malloc(sizeof(Node));
node->value = value;
node->left = node->right = NULL;
return node;
}
void delete_node(Node *node) {
free(node);
}
void delete_tree(Node *node) {
if (!node)
return;
delete_tree(node->left);
delete_tree(node->right);
delete_node(node);
}
Node *search(Node *node, int value) {
if (node->value == value)
return node;
else if (node->value > value)
return node->left ? search(node->left, value) : NULL;
else {
assert(node->value < value);
return node->right ? search(node->right, value) : NULL;
}
}
void insert(Node *node, int value) {
if (node->value == value)
return;
else if (node->value > value) {
if (node->left) {
insert(node->left, value);
} else {
Node *new_node = create_node(value);
node->left = new_node;
}
} else if (node->value < value) {
if (node->right) {
insert(node->right, value);
} else {
Node *new_node = create_node(value);
node->right = new_node;
}
}
}
void delete(Node *node, Node *parent, int value) {
if (node->value == value) {
if (!node->left && !node->right) {
(parent->left == node) ? (parent->left = NULL) : (parent->right = NULL);
delete_node(node);
return;
}
if (!node->left) {
assert(node->right);
(parent->left == node) ? (parent->left = node->right) : (parent->right = node->right);
delete_node(node);
return;
}
if (!node->right) {
assert(node->left);
(parent->left == node) ? (parent->left = node->left) : (parent->right = node->left);
delete_node(node);
return;
}
Node *replace_node = node->left;
Node *replace_node_parent = node;
while (replace_node->right) {
replace_node_parent = replace_node;
replace_node = replace_node->right;
}
node->value = replace_node->value;
(replace_node_parent->left == replace_node ) ? (replace_node_parent->left = replace_node->left) : (replace_node_parent->right = replace_node->left);
delete_node(replace_node);
} else if (node->value > value)
return node->left ? delete(node->left, node, value) : NULL;
else {
assert(node->value < value);
return node->right ? delete(node->right, node, value) : NULL;
}
}
/* test */
void display(Node *node) {
if (node->left) {
display(node->left);
}
printf("%d ", node->value);
if (node->right) {
display(node->right);
}
}
int main(void) {
int data;
Node *root = create_node(10);
while (scanf("%d", &data) != EOF) {
insert(root, data);
}
display(root);
printf("\n");
delete(root, NULL, 10);
display(root);
printf("\n");
delete_tree(root);
return 0;
}
view raw gistfile1.c hosted with ❤ by GitHub

2012年3月25日日曜日

あなたがSonyTabletを買うべき5つの理由

みんな「新しいiPad」に夢中のようですが、
日本人としては Sony Tabletは無視できない存在です。
ということで、今更ですがiPadブームに便乗してSony Tabletを買いました。
使ってみて、ボクなりにSony Tabletの良いところを考えてみました。

  1. すぐ買える

  2. 今、新しいiPadを買おうとしても、どこも売り切れ状態で、予約しないとけません。
    すぐにタブレット端末を使いたいと思って、思っても手に入りません。
    そこで、Sony Tabletです。
    すぐにSony Tabletコーナーに行きましょう。在庫がかならずあります。
    店員さんもiPadの方に夢中で、Sony Tabletはあんまり売る気が無いので声もかけてくれません。
    お店で端末をいくらでもいじり倒せます。

  3. Androidであること

  4. これは重要です。
    Androidはオープンなので、今後たくさんのものに搭載されていきます。
    AndroidのUIがいろんなデバイスの標準になるのです。
    iOSなんて、たかだかiPod/iPhone/IPadぐらいでしょうが、
    Androidはスマフォ・タブレット以外にもTVや、カーナビ、ゴーグルや自転車、ロボットまでにも搭載されるのです。

  5. ソニーのサービスが使える

  6. Sonyの「Video Unlimited」が使えるので、
    Sony Tabletで映画もその場で観れます。
    購入とレンタルがあるようです。(個人的にあんまり観たい映画はありませんでしたが)
    「PlayStation Store」も入っているので、PSのゲームも買ってSony Tabletでプレイすることができます。
    両方ともSony Entertainment Networkのアカウントを使えます。
    あとは、「Reader」で電子書籍も楽しむことができます。
    ちなみに、「Reader」はMy Sony IDのアカウントが必要です。

  7. 「さばドル」のまゆゆの限定写真が見える

  8. これはすごいです。
    渡辺麻友主演のドラマ「さばドル」の限定写真が見れるのです!
    ちなみに、見るためには「ネットフレーム by Life-X」というアプリを
    なぜか、Androidマーケットからダウンロードする必要があります。
    ちなみに、Life-Xには、My Sony IDのアカウントが必要です。

  9. スリルが味わえる

  10. ソニー製品です。
    いわゆる「ソニータイマー」の存在が噂されるほどの品質ですw
    いつ壊れるか、はらはらドキドキのスリルが味わえます。
    (ちなみに、ボクのPSPは1年ぐらいで○ボタンが効かなくなってしまいました。。。)
    また、ソニーのサービスに個人情報をさらにまたスリル満点です。
    一度PSNのIDを流出させましたからね。
    ドキドキですよね。

本当は、赤外線でリモコンの役割を果たすとか、
DLNA対応で、Playerとして利用できるとかいろいろあるのですが、
家にテレビとか情報家電系のものがないので試すことができないので、
試した方は使い勝手を教えてください。