読者です 読者をやめる 読者になる 読者になる

TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

アプリのUIデザインはズルいデザインテクニックを活用しよう!

@ITHTML5 + UX : HTML5とUXの総合情報フォーラムというカテゴリで、少ない手間と知識でそれなりに見せる、ズルいデザインテクニックという記事があります。

クラフトビールの情報(特にクラフトビールが買えるお店のやつ)をiPhoneで気軽にチェックしたいという自分の欲求を満たすためにアプリ作っているのですが、UIデザインをそれっぽく仕上げたいので上記記事を参考にして、このような↓感じのUIを作ってみました。

f:id:h5y1m141:20130403072229p:plain

グラデーション設定での工夫点

SassやCompassを使って、ズルいデザインテクニック (1/2)という記事の中でズルいグラデーションという内容が取り上げられています。

一部引用すると

ベタ塗り一歩手前くらいの、微妙な明度差のグラデーションで本物っぽい質感を出そう

一見、1色でベタ塗りにしたように見えるけど、よく見ると微妙に上下で色の明るさが異なるグラデーションを、「ズルいグラデーション」と呼んでいます。

という事が書かれています。

上記記事の途中にも書かれてるのですが、グラデーションって、これまでの自分の中でのイメージとして、大胆に色を変化させるものしか考えたことが無かったので、微妙に色が変わるようなグラデーションっていうのは新鮮な考え方でした

Ti.UI.TableViewでの実装ポイント

ズルいグラデーションを参考にTi.UI.TableViewでの実装ポイントについて以下にあげておきます

  • Ti.UI.TableViewの背景色は単色の塗りを設定するが、その際に真っ白(#ffffff)ではなく、少しグレーがかった色(#ededed)を指定
  • TableViewRowの背景色はbackgroundGradientプロパティを活用してグラデーションをかけるが、グラデーションの終わりの色を暗くするが、Ti.UI.TableViewの背景色からあまり離れないような色目を設定
  • TableViewRowに直接ImageView やLabelを配置せず、下記スクリーンショットのようにContainerとなるTi.UI.Viewを生成。そこにImageView やLabelを配置
  • ContainerとなるTi.UI.Viewの背景色はbackgroundGradientプロパティを使い、枠線の幅と色を設定。枠線はTi.UI.TableViewの背景色よりも少し濃い目の色を設定するとそれっぽくなる

f:id:h5y1m141:20130403072244p:plain

backgroundGradientプロパティの詳細の説明は、Titanium Mobie TableView Tips微妙な明度差のグラデーションを活用にまとめていますので、よろしければそちらご覧ください!(単にTitanium Mobie TableView Tipsの宣伝したかっただけなんだけどね(^^)

ソースコードサンプル

そのアプリのソースコードの一部を以下にまとめておきました

app.coffee

maintable = require("maintable")
tableView = new maintable()
mainTable = tableView.getTable()

mainWindow = Ti.UI.createWindow
  title: "クラフトビール東京"
  barColor:"#DD9F00"
  
entries = [
  title: "押上のハート&ハートで『ビアゼミ』を開催。2013/04/07(日)"
  link: "http://craftbeer-tokyo.info/announcement/heart-beer-seminer-2013-04-07/"
  author: "kawano"
  publishedDate: "Mon, 01 Apr 2013 03:39:24 -0700"
  content: "押上のハート&ハートで、ビールセミナーが開催されます。 解説は、クラフトリカーズの吉田茂氏と、両国 ポパイの城戸氏ですから、深い話が聞けることが確実。 吉田氏は、以前、ヤッホーブルーイングさんに勤めていらっしゃいました。…"
,
  title: "ジャパン ブルワーズカップ&フェスティバル 2013の前売り券(入場料+ビール3杯)を10名様にプレゼント!"
  link: "http://craftbeer-tokyo.info/event/jbcf-2013-ticket-present/"
  author: "kawano"
  publishedDate: "Wed, 27 Mar 2013 20:02:07 -0700"
  content: "ジャパン ブルワーズカップ&フェスティバル 2013は、日本・ドイツ・ベルギー・アメリカのビールメーカーが20社以上、横浜に集結し、70種類以上のクラフトビールが1杯500円から楽しめるイベントです。ビール職人によるビア…"
]

result = []
result.push(tableView.createRow(entry)) for entry in entries
mainTable.setData result

mainWindow.open()

mainTable.coffee

class mainTable
  constructor: () ->
    @table = Ti.UI.createTableView
      backgroundColor:'#ededed'
      separatorColor: '#ccc'
      zIndex:2
      width:320
      left:0
      top:0
    
    
    @table.addEventListener('click',(e) =>

    )
    
  getTable: ()->
    return @table
    
  createRow: (entry) ->
    row = Ti.UI.createTableViewRow
      backgroundGradient:
        type: 'linear'
        startPoint:
          x:'0%'
          y:'0%'
        endPoint:
          x:'0%'
          y:'100%'
        colors: [
          color: '#eeeeee'
          position: 0.0
        ,      
          color: '#dddddd'
          position: 0.7
        ,      
          color: '#dcdcdc'
          position: 1.0
        ]
      width:320
      height:150



    imagePath = @_retrevieImagePath(entry.content)
    
    pictImage = Ti.UI.createImageView
      image:imagePath
      width:80
      height:80
      left:5
      top:5

    pictImageContainer = Ti.UI.createImageView
      width:90
      height:90
      left:5
      top:5
      borderColor: "#ccc"
      borderWidth: 1
      backgroundGradient:
        type: 'linear'
        startPoint:
          x:'0%'
          y:'0%'
        endPoint:
          x:'0%'
          y:'100%'
        colors: [
          color: '#fff'
          position: 0.0
        ,      
          color: '#fefefe'
          position: 0.7
        ,      
          color: '#eee'
          position: 1.0
        ]

    
    pictImage.addEventListener('load',(e) ->
      blob = e.source.toBlob()
      blob.imageAsCropped
        width:100
        height:100
        x:10
        y:50
    )
    pictImageContainer.add pictImage
    


    textLabel = Ti.UI.createLabel
      width:180
      height:20
      top:5
      left:110
      color:'#DD9F00'
      
      font:
        fontSize:16
        fontWeight:'bold'
      text:entry.title

      
    bodySummary = Ti.UI.createLabel
      width:180
      height:50
      left:110
      top:35
      color:"#444"
      
      borderRadius:3
      font:
        fontSize:12
      text:entry.content.replace(/<\/?[^>]+>/gi, "")

    container = Ti.UI.createImageView
      width:300
      height:100
      left:10
      top:5
      borderWidth:1
      borderColor:"#ccc"
      backgroundGradient:
        type: 'linear'
        startPoint:
          x:'0%'
          y:'0%'
        endPoint:
          x:'0%'
          y:'100%'
        colors: [
          color: '#fff'
          position: 0.0
        ,      
          color: '#fefefe'
          position: 0.7
        ,      
          color: '#eee'
          position: 1.0
        ]
      
      # styleId: "container"

    messageBoxContainer = Ti.UI.createImageView
      width:300
      height:40
      left:10
      top:105
      borderColor:"#ccc"
      backgroundGradient:
        type: 'linear'
        startPoint:
          x:'0%'
          y:'0%'
        endPoint:
          x:'0%'
          y:'100%'
        colors: [
          color: '#fff'
          position: 0.0
        ,      
          color: '#fefefe'
          position: 0.3
        ,      
          color: '#eee'
          position: 1.0
        ]
      

      
      
    container.add pictImageContainer
    container.add textLabel
    container.add bodySummary

    row.add container
    row.add messageBoxContainer
    
    row.data = entry
    row.className = 'entry'

    return row
    
      
module.exports = mainTable