2017/02/16

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

[Android で Custom Progress Bar を作る方法](http://kokufu.blogspot.jp/2017/02/android-custom-progress-bar.html) を書いてて、アニメーションGIF を作った時の備忘録。

結局、[ffmpeg](https://ffmpeg.org/) で全フレームを静止画に変換し、各フレームを [ImageMagick](https://www.imagemagick.org/script/index.php) で処理してから、アニメーションGIFに変換するのがベストという結論に。

2017/02/15

Android で Custom Progress Bar を作る方法

Progress **Bar** といっても、バー状のものではなく、indeterminate モードを自作する方法です。
indeterminate モードは、終了時間が未定の時に使用される周期的なアニメーションを指します。

### indeterminateDrawable を記述すればよい 実は、やり方は簡単。 `ProgressBar` の `indeterminateDrawable` に [Drawable Animation](https://developer.android.com/guide/topics/graphics/drawable-animation.html) を指定すれば良いのです。 注意点としては、`layout_width`, `layout_height` に `wrap_content` が使えないということ。サイズを指定する必要があります。 /res/layout/activity_main.xml ```xml `highlight: 10; <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 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](https://developer.android.com/guide/topics/graphics/drawable-animation.html) はリンク先にもあるようにパラパラ漫画の要領でアニメーションを作成します。 例えば、`ic_signal_wifi_[0-4].png` のようなファイルを用意し、以下のように `animation01.xml` に記述します。 /res/drawable/animation01.xml ```xml <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 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](https://developer.android.com/guide/topics/resources/animation-resource.html) の [RotateDrawable](https://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html) を使えば、リソースが一つしかなくても回転アニメーションを作成できます。 例えば以下のように-360 にしているのは回転方向を反時計周りにするためです。。 /res/drawable/animation02.xml ```xml <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="-360" android:drawable="@drawable/ic_sync"/> ```
この方法、速度指定できないですし、細かい制御には向いていません。 > 参考 > > 速度を N倍にする方法はあるみたい > - [AndroidのRotateDrawableで回転速度を調整する - scache’s blog](http://scache.hatenablog.com/entry/2016/12/15/022152)

2017/02/07

PSoC で I2C のアドレスをスキャンする方法

[Cypress](http://japan.cypress.com/) PSoC の I2C モジュールを使ってアドレスをスキャンする方法。
こんなの滅多にやらないから、備忘録として。

> 参考
> - [I2C Scan | Cypress Semiconductor](http://japan.cypress.com/forum/psoc-4-architecture/i2c-scan)

```c
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
        }
    }
}
```

2017/01/30

Python の Dictionary を独自フォーマットの文字列で出力する

Dictionary を list のように "," で join する良い方法を探していたら、こんなのがあった。

> 参考
> - [python: dictionary to string, custom format? - Stack Overflow](http://stackoverflow.com/questions/8519599/python-dictionary-to-string-custom-format)

そうか、一回リストにしちゃえばいいわけだ。

```
",".join(["{0}={1}".format(key, value) for (key, value) in dic.items()])
```

2017/01/16

drawable-nodpi と drawable-anydpi と drawable の違い


[Android Drawable Importer](https://github.com/winterDroid/android-drawable-importer-intellij-plugin) というプラグイン一般的によく使われるようなアイコンを一発で追加できるプラグインです。結構便利。を使って Vector Drawable を追加すると、`drawable-anydpi` というディレクトリに追加されます。 前々から気になっていた `drawable-nodpi` との違いを調べてみたところ、意外と情報が少なかったのですが、こちらのブログに情報がありました。 - [The CommonsBlog — -nodpi, -anydpi, and WTF?](https://commonsware.com/blog/2015/12/21/nodpi-anydpi-wtf.html) 以下、まとめようと思ったのですが、原文がすばらしかったので、ほぼ翻訳です。