2018年2月15日 星期四

Raspberry Pi 接電腦螢幕 HDMI 無聲音

手上一塊 Pi3 用 HDMI 接電腦螢幕沒聲音,但是接電視有聲音,所以判斷應與硬體無關,是軟體設定導致

在網路上搜尋到的資料大部分是說需要修改 boot/config.txt,並且只要加入一行

hdmi_drive=2

就可以成功輸出聲音,但我加入之後還是沒用

聲音問題在 Pi 上面一直是一個 known issue,在這邊有一些紀錄,也有一些其他的設定可以試,例如我照著上面的建議,在 config.txt 中加上一行

hdmi_force_edid_audio=1 

後就可以成功輸出聲音了

這個設定的意義在這邊有解釋,就是 Pi 會假設你的 HDMI 顯示器可以解所有的音訊格式,即使它沒說它可以,所以會把所有格式的聲音資料通通傳輸出去

看起來就是一個容忍裝置沒照 HDMI 規範走的設定,但不管如何,問題解決了,在此紀錄一下

2018年1月28日 星期日

Android CoordinatorLayout

CoordinatorLayout  是在 android support library 提供的一個頂層 Layout,他的作用主要是讓在 layout 中的 child view 可以讓有特定的互動,例如如果不是用 CoordinatorLayout 而使用 FloatingActionButton 和 SnackBar 的話,SnackBar 彈出時會覆蓋到 FAB,但是如果使用 CoordinatorLayout,SnackBar 彈出時 FAB 位置會隨之往上移動,不會被 SnackBar 蓋到

而一些效果也需要 CoordinatorLayout,例如在 CoordinatorLayout 中包含一個 ListView,並讓使用者在滑動的時候讓 app bar 隨著上滑的動作隱藏,下拉的動作顯示

像這些比較經典的效果在 library 中都已經做好簡單的實作讓開發者可以方便的完成,當然也許還可以實現更特殊的效果,但需要對 CoordinatorLayout  的原理更加熟悉

Reference:
https://www.jianshu.com/p/4a77ae4cd82f
https://code.tutsplus.com/articles/scrolling-techniques-for-material-design--cms-24435
http://blog.30sparks.com/material-design-5-appbarlayout/

2018年1月27日 星期六

Android support library preference 坑

當使用 v7 support library 的 preference 時,你會發現你的 preference 不是 material design 的樣式,如同在這邊提到的狀況一樣,原因是因為 google 在 v7 support library 中漏放了 material design 的 theme,所以才會導致你的 preference 看起來很奇怪

雖然在 v7 中沒放,但是在 v14 中有放,所以網路上有人的解法就是再將 v14 support library include 進來,然後引用 v14 中的 theme,如這邊提到的作法



但是這樣還不是完美的,因為你會發現你的 PreferenceCategory 的文字的顏色和字體不對,在 google issue tracker 有人說明在 color.xml 中加入 preference_fallback_accent_color 並定義你想要的顏色就可解決此問題

經過了上述修改,現在 preference 看起來終於像樣一點了,但是引用 v14 support library 也帶來了一些其他缺點,例如你的 app size 會變大,另外用 v14 就必須把 minSdkVersion 設定在 14 以上這對想支援舊機種的 app 來說也會造成困擾

只能說 Android 又挖坑給別人跳了

Android 添加 自定義 Toolbar


在使用 Android support library 中有一些 theme 可以用,例如 heme.AppCompat.Light.DarkActionBar,這些 theme 中已經幫 user 定義好了 app bar,但有時我們需要自訂自己的 app bar,這時可以在 activity layout xml 中宣告自己的 Toolbar 元素



但單只這樣還不夠,因為這樣自己宣告的 Toolbar 和 內建的 Toolbar 有衝突,執行時會出錯,這時需將該 activity 預定義好的 Toolbar 拿掉,support library 中也有包含了無 Toolbar 的 theme,例如 Theme.AppCompat.Light.NoActionBar,或者我們自己在 styles.xml 中定義自己的 no action bar 的 theme,定義自己 no action bar 的 theme 需要設定兩個欄位 windowActionBar 和 windowNoTitle 如下



這樣才能正確使用我們自定義的 action bar

2018年1月14日 星期日

ImageView 的android:adjustViewBounds

之前使用 ImageView 時遇到一個問題,把 ImageView 中的圖縮小之後,ImageView 卻沒有跟著縮小到符合內含 image 的寬高,Google 後發現 ImageView 要設定 adjustViewBounds=true 才會讓 ImageView將自己縮到符合 Image 的寬高,在 StackOverflow 這邊也有提到,令人奇怪的是這個欄位為什麼預設不是 true

2018年1月13日 星期六

Android 動畫

Android 目前的動畫處理系統是 property  animation system(pas),這是用來取代更早時期的 Android 動畫系統 View animation system(vas),vas 的缺點是只能改變 view 在 screen 上被畫出來的位置,實際上的位置沒有改變,例如將一個 button 從 x = 0 的位置平移到 x = 10 的位置,從畫面上來看 button 移動了,但是 button 實際上還在 x = 0 的位置,要點擊 x = 10 位置才會觸發 button 的 onClick event,pas 就解決了這個問題,它會將 view 的 property 一起改變

pas 提供了 ValueAnimator,ObjectAnimator讓使用者操作動畫,用 ObjectAnimator  應該可以處理大部分的動畫,pas也提供了 View 一般預設 property 型態的 evaluator 例如 IntEvaluator,FloatEvaluator 和 ArgbEvaluator,用來在動畫過程中計算出 view property

此外還提供了多種 Interpolators 可供選擇,它的作用是決定動畫的速度,例如 LinearInterpolator 就是動畫過程中速度是一致的,而 AccelerateInterpolator 就是動畫一開始速度慢後面慢慢變快

還有 AnimatorSet 可以讓使用者將多個動畫結合在一起操作,例如哪些動畫要同時啟用,哪些動畫要在特定動畫前啟用等等

Keyframes 跟 PropertyValuesHolder 讓使用者更簡單的實現出複雜的動畫,Keyframe 的概念是從傳統動畫中衍伸出,一個 Keyframe 定義了某個時間點該 view 的 property,而兩個 Keyframe 中間的動畫則由系統幫你補起來,例如 Keyframe 1 定義了時間 0 和 x = 0,Keyframe 2 定義了時間 10 和 x = 10,則系統會幫你做出平移 x 從 0 到 10 的動畫,藉由定義多個 Keyframe,就可以實現比較複雜的動畫效果

也可以將 animator 或 animator set 寫在 xml 裡面,方便多個 activity 可以共享同樣的動畫效果

Reference
https://developer.android.com/guide/topics/graphics/prop-animation.html

2017年12月11日 星期一

Fritzing -- 好用的 PCB 電路板設計工具

markdown Fritzing 是一個很好用電路板設計工具,大部分都是用拖拉完成電路設計,還可以用來作電路設計文件,軟體內也內建一些知名的電路板可以直接拿出來用,例如 Arduino 或 GogoBoard 等等。 它的麵包板檢視功能可以很方便的作出電路圖,而且如果裡面內建的元件不夠用,還可以自己加入客製化的圖片,元件庫的 core parts 的 breadboard image 可以很方便的加入圖片到 breadboard view 中 在[網路](http://coopermaa2nd.blogspot.tw/2011/01/fritzing-pcb.html)上也有很多關於 Fritzing 的介紹。