ユーザごとに文字色を変えたい

概要

AzureaScript? Advent Calendar2日目。日付が変わりそうだけどぎりぎり間に合いました。

Azureaってみんな文字色が黒色です。特にこれと言って困ることもないのですが、クリスマスのイルミネーションみたいに色んな色で表示されたらちょっと楽しいかも。

せっかくなのでスクリプト拡張で解決します。

スクリプト

System.views.getView(0).addEventListener('postProcessItem', function(item){
    var c = 0;
    for(var i = 0; i < item.status.user.screen_name.length; ++i){
        c += item.status.user.screen_name.charCodeAt(i);
        c *= item.status.user.screen_name.charCodeAt(i);
        c %= 0xffffff;
    }
    item.textColor = c;
});

解説

タイムラインのビューに流れてくるすべてのステータスの文字色がユーザごとに色んな色で表示されます。色はランダムなので読みにくい場合がわりと多くてちょっと困りものですが…

タイムラインのビューに対して、項目を追加し終わった際に呼ばれるイベントにたいしてイベントハンドラを設定します。getView(0)という省略した書き方はAPI Level 20から出来るようになりました。

イベントハンドラでは、各ユーザに対してランダムな文字色を割り当てています。この時、文字色を各ユーザのscreen_nameを元にして適当な計算をすることでなんだかそれっぽいランダムな文字色にしています。一種のハッシュ関数の様な感じです。最後に生成した色を実際のUIに反映すればできあがり。

YUV空間に変換をして輝度と色差を評価すると文字が読みやすいかどうかが分かるのでそれを使って計算を行いたかったのですが時間が無かった…

コメントとか


もし見えてたら空欄にしてね!:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-27 (土) 10:33:40 (1443d)