2014年9月25日 星期四
Prezi
之所以會介紹Prezi,是因為看到他特別的presentation方式,每次在報告的時候都覺得powerpoint非常的單調,覺得少了什麼.... 前陣子去參加聚會的時候,意外看到了Prezi,深深的被他特別的present方式給吸引,我想最近應該會轉用這種東西做投影片了吧!! 上面是我稍微玩一下的作品,可以看出他特別的呈現方式. 在這邊介紹給大家
2014年9月23日 星期二
Android 開發(六十八) listview header animation
最近由於工作的需要寫了一個很簡單的listview header的 animation
這個animation看起來很簡單,實際上也真的是不難啦...不過真的花了我不少時間tune...
首先,我們要做的事情很簡單,就是在itemclick的時候,把header長出來,然後當header長出來之後,在重新click一次就會退回去,所以我們首先會先想到使用
translationY的這個 property.
ObjectAnimator animX = ObjectAnimator.ofFloat(listview, "translationY", 0f, -textview.getHeight());
ObjectAnimator animY = ObjectAnimator.ofFloat(textview, "translationY", 0f, -textview.getHeight());
利用上面的code我們就可以依照我們希望的方法將head (Textview)長出來/藏起來了
But.........
事情永遠不會是我們想的那麼簡單,當利用tranlationY將view往上移動之後就會發現,整個listview變短了,為了避免掉這個問題,所以我們必須在移動完成之後,將listview的height 往下延伸,那要怎麼做?
ps. code寫的非常凌亂而且有很多地方還可以修改,只是為了展現功能而寫的.
這個animation看起來很簡單,實際上也真的是不難啦...不過真的花了我不少時間tune...
首先,我們要做的事情很簡單,就是在itemclick的時候,把header長出來,然後當header長出來之後,在重新click一次就會退回去,所以我們首先會先想到使用
translationY的這個 property.
ObjectAnimator animX = ObjectAnimator.ofFloat(listview, "translationY", 0f, -textview.getHeight());
ObjectAnimator animY = ObjectAnimator.ofFloat(textview, "translationY", 0f, -textview.getHeight());
利用上面的code我們就可以依照我們希望的方法將head (Textview)長出來/藏起來了
But.........
事情永遠不會是我們想的那麼簡單,當利用tranlationY將view往上移動之後就會發現,整個listview變短了,為了避免掉這個問題,所以我們必須在移動完成之後,將listview的height 往下延伸,那要怎麼做?
這樣就可以做出一個簡單的動畫了,最後附上原始版 gist 供大家參考,RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) listview.getLayoutParams();p.bottomMargin = -textview.getHeight();listview.setLayoutParams(p);
ps. code寫的非常凌亂而且有很多地方還可以修改,只是為了展現功能而寫的.
2014年9月15日 星期一
Android 開發(六十七) Triangle drawable
最近有個需求,需要我們利用程式來畫三角形,當下小弟是一點頭緒都沒有,
還好平時有在讀別人code的習慣,就想到了可以使用Path來畫我們需要的圖形,
首先我們必須先選出三角形的三個頂點,
上面的三個頂點,會畫出一個倒三角形
會置放在canvas的3分之2的位置,在決定了三個頂點之後,接著就只需要利用PATH將圖畫出來即可,
上面的程式讓我們可以填滿三角形,並描繪出該三角型。 詳細的程式碼可以參考 https://gist.github.com/nightbear1009/ad4d9d96faeb7a756931
還好平時有在讀別人code的習慣,就想到了可以使用Path來畫我們需要的圖形,
首先我們必須先選出三角形的三個頂點,
Point a = new Point(paddingLeft+0+stroke, Math.max(canvas.getHeight()/3*2-(int)TriHeight-stroke,0)); Point b = new Point(paddingLeft+(int)TriBottom*2 +stroke, Math.max(canvas.getHeight()/3*2-(int)TriHeight-stroke,0)); Point c = new Point(paddingLeft+(int)TriBottom+stroke, Math.max(canvas.getHeight()/3*2-stroke,0));
上面的三個頂點,會畫出一個倒三角形
會置放在canvas的3分之2的位置,在決定了三個頂點之後,接著就只需要利用PATH將圖畫出來即可,
Path path = new Path(); path.setFillType(FillType.EVEN_ODD); path.moveTo(a.x, a.y); path.lineTo(b.x, b.y); path.lineTo(c.x, c.y); path.lineTo(a.x, a.y); path.close();
上面的程式讓我們可以填滿三角形,並描繪出該三角型。 詳細的程式碼可以參考 https://gist.github.com/nightbear1009/ad4d9d96faeb7a756931
2014年9月10日 星期三
Android 開發(六十六) gradle rebuild 但是修改的參數並沒有被更改
利用 gradle build --rerun-tasks
例如:
在build.gradle 裡寫入這樣的參數
ext {
ga_apptracker = "UA-123456-1"
ga_global_logLevel = "verbose"
ga_global_dryRun = "true"
}
然後利用gradle replace掉特定的參數
這個情形在第一次的時候會順利更改資料,但是不知道為何之後就不會再被更改,
即使rebuild也沒有用,我猜測是因為 android studio 將該檔案視為 update to date 所以並不會重新被更動
這樣可以確保project重新 rebuild ,雖然這樣會很花費時間,
但是可以確保build.gradle檔案裡的資料會被更新成最新版本的資料
不過...如果只是要確保每次都會執行,目前有較好的做法
task GABuildValueCopy <<{
copy {
...dosomething
}
}
在android studio 0.8.6 這樣寫就可以確保每次執行該task都會被執行到
訂閱:
文章 (Atom)