動画を切り出してアニメーションGIFを作る方法

Android で Custom Progress Bar を作る方法 を書いてて、アニメーションGIF を作った時の備忘録。
結局、ffmpeg で全フレームを静止画に変換し、各フレームを ImageMagick で処理してから、アニメーションGIFに変換するのがベストという結論に。
Android で Custom Progress Bar を作る方法

Progress Bar といっても、バー状のものではなく、indeterminate モードを自作する方法です。 indeterminate モードは、終了時間が未定の時に使用される周期的なアニメーションを指します。
indeterminateDrawable を記述すればよい
実は、やり方は簡単。
ProgressBar
の indeterminateDrawable
に Drawable Animation を指定すれば良いのです。
注意点としては、layout_width
, layout_height
に wrap_content
が使えないということ。サイズを指定する必要があります。
/res/layout/activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 | <? xml version = "1.0" encoding = "utf-8" ?> android:layout_width = "match_parent" android:layout_height = "match_parent" > < ProgressBar android:layout_width = "120dp" android:layout_height = "120dp" android:layout_centerInParent = "true" android:indeterminateDrawable = "@drawable/animation01" /> </ RelativeLayout > |
Drawable Animation の作り方
Drawable Animation はリンク先にもあるようにパラパラ漫画の要領でアニメーションを作成します。
例えば、ic_signal_wifi_[0-4].png
のようなファイルを用意し、以下のように animation01.xml
に記述します。
/res/drawable/animation01.xml
1 2 3 4 5 6 7 8 9 | <? xml version = "1.0" encoding = "utf-8" ?> android:oneshot = "false" > < item android:duration = "200" android:drawable = "@drawable/ic_signal_wifi_0_bar" /> < item android:duration = "200" android:drawable = "@drawable/ic_signal_wifi_1_bar" /> < item android:duration = "200" android:drawable = "@drawable/ic_signal_wifi_2_bar" /> < item android:duration = "200" android:drawable = "@drawable/ic_signal_wifi_3_bar" /> < item android:duration = "200" android:drawable = "@drawable/ic_signal_wifi_4_bar" /> </ animation-list > |
あとは、上記のように indeterminateDrawable
属性に指定すれば、以下のような Custom Progress Bar が完成します。
さらに簡易的な方法もある
単純な回転の場合、 Animation Resources の RotateDrawable を使えば、リソースが一つしかなくても回転アニメーションを作成できます。
例えば以下のように1。
/res/drawable/animation02.xml
1 2 3 4 5 6 7 | <? xml version = "1.0" encoding = "utf-8" ?> android:pivotX = "50%" android:pivotY = "50%" android:fromDegrees = "0" android:toDegrees = "-360" android:drawable = "@drawable/ic_sync" /> |
この方法、速度指定できないですし、細かい制御には向いていません。
参考
速度を N倍にする方法はあるみたい
- -360 にしているのは回転方向を反時計周りにするためです。 ↩
PSoC で I2C のアドレスをスキャンする方法
Cypress PSoC の I2C モジュールを使ってアドレスをスキャンする方法。 こんなの滅多にやらないから、備忘録として。
参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | bool TestI2CAddress(uint8 address) { uint32 status = I2C_I2CMasterSendStart(address,I2C_I2C_READ_XFER_MODE); I2C_I2CMasterSendStop(); return !status; } int main() { static uint8 I2C_address; CyGlobalIntEnable; I2C_Start(); while ( true ) { for (I2C_address = 0; I2C_address < 0x7F; I2C_address++) { if (TestI2CAddress(I2C_address)) { // I2C_address が存在する // 出力する等何か処理 } } while ( true ) { // Wait } } } |