2017/02/28

Python でディレクトリ内のファイル一覧を取得する方法3種

微妙に動作が違ってすぐ迷うので備忘録1

例として、こんなディレクトリ構造を使用します。

.
└── dir
    ├── a.txt
    ├── b.txt
    ├── c.jpg
    └── subdir
        ├── d.yaml
        └── e.conf
2017/02/27

Docker で GUI アプリケーションを実行する方法

2017/02/16

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

2017/02/15

Android で Custom Progress Bar を作る方法

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

indeterminateDrawable を記述すればよい

実は、やり方は簡単。 ProgressBarindeterminateDrawableDrawable Animation を指定すれば良いのです。 注意点としては、layout_width, layout_heightwrap_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"?>
<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 はリンク先にもあるようにパラパラ漫画の要領でアニメーションを作成します。

例えば、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"?>
<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 ResourcesRotateDrawable を使えば、リソースが一つしかなくても回転アニメーションを作成できます。

例えば以下のように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倍にする方法はあるみたい

  1. -360 にしているのは回転方向を反時計周りにするためです。 
?
2017/02/07

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