月別: 2014年12月

AnimationDrawable 静止画を使ったアニメーション

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

静止画像(pngなどの画像リソース)を用意してパラパラ漫画の要領でアニメーションさせるには、AnimationDrawableクラスを利用します。

Android APIs Reference – AnimationDrawable

AnimationDrawableのサンプル

文字が変わってるだけですが、3つの画像でアニメーションしてます。画像を準備するのが面倒くさかったので、文字だけの画像を使いました。

アニメーションに使う静止画像

画像は解像度に合わせてres/drawable/hdpiなどのディレクトリに用意します。

今回はanime_test1.png,anime_test2.png,anime_test3.pngの3つの画像ファイルを用意しました。画像と言いつつ数字の1,2,3が書かれているだけの画像です。

ちなみにファイル名として使えるのは小文字のアルファベット、数字、アンダースコア(_)とドット(.)のみです。それ以外の文字(大文字アルファベットなど)を使うと以下のようにコンパイルエラーとなります。

Invalid file name: must contain only lowercase letters and digits ([a-z0-9_.])

アニメーション設定のXMLファイル

どの画像を何秒間表示させるのかという設定をXMLファイルに記述します。今回はres/drawable/test_animation.xmlというファイル名にしました。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/anime_test1"
          android:duration="500"/>
    <item android:drawable="@drawable/anime_test2"
          android:duration="500"/>
    <item android:drawable="@drawable/anime_test3"
          android:duration="500"/>
</animation-list>

android:oneshot=trueで、アニメーションを1回のみ再生する設定になります(最後の画像でアニメーションが止まる)。falseだとループ再生されます。

アニメーションを再生する

test_animationは何もしなければ単なる静止画と同じで、Drawableとして扱うことができます。ImageViewのsrc属性に設定したり、TextViewのbackground属性に設定したりすることができます。

今回はImageButtonに上記で作成したdrawableを設定してやり、ボタンを押したらアニメーションが再生されるようにしてみます。

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivity">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_button"
        android:src="@drawable/test_animation"
        />

</RelativeLayout>

APIリファレンスではandroid:background属性に設定していますが、これはandroid:src属性に設定しても動きました。src属性にAnimationDrawableを設定した場合、getBackground()ではなくgetDrawable()でAnimationDrawableを取得します。

MainActivity.java(onCreateを抜粋)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageButton imageButton = (ImageButton) findViewById(R.id.image_button);
        final AnimationDrawable animationDrawable = (AnimationDrawable) imageButton.getDrawable();

        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                animationDrawable.start();
            }
        });
    }

AnimationDrawableを取得して、start()メソッドを呼び出せばアニメーションさせることができます。

ただしできるのは再生するか停止するかくらいで、逆再生したりはできないみたいです。

Android Support LibraryのソースコードをGrepCodeを使って確認する

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android Support LibraryのソースコードはAndroid Studioで確認することができません

例えば、android.support.v7.app.ActionBarActivityのソースコードを確認したいとしましょう。その場合、調べたいクラスをCmd+クリックすることで、対象のクラスのソースコードに自動的にジャンプできます。

Android Studioでソースコードを確認する

しかし、サポートライブラリについてはソースコードまでは見つかりません。

ActionBarActivity

ちなみにAndroid SDKのクラスであれば、SDKマネージャーでソースコードまでダウンロードしていれば確認することができます。例えばBundleクラスのソースコードは以下のように確認できます。

例:Bundleのソースコード

サポートライブラリのソースコードを確認するのは、Gitを使ってGoogleのリポジトリから拾ってくる方法もありますが、今回はWebサービスのGrepCodeを利用してみます。

GrepCodeにアクセスして、検索したいクラスを入力します。(今回の場合はandroid.support.v7.app.ActionBarActivity)

検索したいクラスを入力

すると検索結果が表示されるので、調べたいクラスのバージョンを選択します。

バージョンを選択

他のバージョンとの差異をDiffで確認できるので、バージョンアップでどこが変更されたのかを調べるのにはちょうどいいかもしれません。

他バージョンとの際はDiffで確認できる

比較するバージョンを選択

Android Studioのプレビュー画面でActionBarが表示されないと勘違いした話

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

最近Android Studioを使ってプロジェクトを作った際に、ActionBarが表示されていないことが気になっていました。

以前までだと、特に何もしなくとも表示されていたはずのActionBar。自分でも特にActionBarのためにコードを書いたり、XML書いたりした覚えがないので、どうすればいいのやらサッパリでした。

実際にはタイトルバーの部分にアプリアイコンが表示されなくなってるだけであって、ActionBarがなくなっているわけではありません。画面のプレビューではActionBarが表示されなくなっていたせいで、私が勘違いしていただけでした。

プレビュー画面の違い

上記の画像は、両方共ソースコードに変化はありませんが、targetSdkVersionと利用するサポートライブラリのバージョンが異なるものです。

左がtargetSdkVersionが20、app/build.gradleのdependanciesで利用するサポートライブラリのバージョンをcom.android.support:appcompat-v7:20.+と指定したもの。

右はAndroid Studio 1.0の新規プロジェクト作成ウィザードで作られたデフォルトの状態のもの。(targetSdkVersion21,com.android.support:appcompat-v7:21.0.3)

API21(Lolipop)からMaterial Designが導入されたことによる影響なんでしょうね。新しく導入されたToolBarを使えということなんでしょうが、使い方がよく分からず苦戦中です。

ちなみに右の状態でも、エミュレーターで実行するとちゃんとActionBarが表示されます。(ただし従来のようなアプリアイコン+タイトルの表示ではありません)

targetSdkVersion21で実行した状態

ToolBarのClass Overviewに以下の記述があり、Lolipop以降では従来のアプリケーションアイコン+タイトルはやめろってことなんでしょうね。

In modern Android UIs developers should lean more on a visually distinct color scheme for toolbars than on their application icon. The use of application icon plus title as a standard layout is discouraged on API 21 devices and newer.

確かにマテリアルデザインで設計された画面の中でアプリアイコンがぽつんとあると、浮いた感じがして気持ち悪い気もしてきました。

それにしてもデザインに対するハードルがどんどん上がっていって辛い・・・。

AndroidのOSバージョンとコードネームとAPIの一覧表

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

私は未だにAndroidのOSバージョンとAPIの数字とコードネームが結びついていません。最新の5.0がAPI21で、Lolipopだというのは分かるんですけどね。

ソースコードを読んでいて、JBとかICSとか出てきて「それバージョンで言うとどこ?」と混乱したのでまとめておくことにしました。

バージョン コードネーム api
5.0.1 Lolipop 21
4.4w Android L Preview
(KitKat+Wearable Extensions)
20
4.4 KitKat 19
4.3 Jelly Bean 18
4.2.x 17
4.1.x 16
4.0.3〜4.0.4 Ice Cream Sandwich 15
4.0〜4.0.2 14
3.2 Honeycomb 13
3.1 12
3.0 11
2.3.3〜2.3.7 Gingerbread 10
2.3〜2.3.2 9
2.2 Froyo 8
2.1 Eclair 7
2,0.1 6
2.0 5
1.6 Donut 4
1.5 Capcake 3
1.1 2
1.0 1

Android Studioのデフォルトでは、API10〜21をサポートするようにプロジェクトが作成されます。2.3.3までサポートするということですね。

ちなみにOSバージョンごとのシェアはAndroid DevelopersのDashbordsで公開されています。(2.2以降のバージョンのみですが)

コードネームの頭文字がAから順番につけられているので、それを押さえていれば大体どのあたりのバージョンなのか検討がつくかもしれません。

Android Studio 1.0正式版がリリースされています

この記事は最終更新から3ヶ月以上が経過しています。情報が古い可能性があります。

Android Studio 1.0が正式版になりました。

Android Tools Project Site > Recent Changes

Android Developers Blog > Android Studio 1.0

プレビューバージョンで暫定的に取り込まれていた機能が洗練されたり、正式版になって新たにサポートされるようになった機能があったりします。

ウィザードからサンプルコードを取り込めるようになった

個人的にはウィザードからAndroidのサンプルコードを取り込むことができるようになったのが気になるところです。

Android Studio 1.0 ウィザードからサンプルコード取り込み

こういう機能を実装するにはどうすればいいのかというサンプルがいろいろと用意されているようです。画面のあるものについては、プレビュー画面で画像が表示される仕組みになっていました。(サンプルコードがGitHubで公開されていて、そこに画像があれば表示するってだけですけど)

Android Studio 1.0 サンプルコード

サンプルコードをウィザードで取り込めると、変なところでハマったりしなくて済んで楽チンですね。

画面レイアウトのプレビューがパワーアップ

Layout.xmlをいじる際の画面プレビューが進化してます。

画面サイズごと、Androidのバージョンごとのプレビューを一覧表示できるようになってます。表示がおかしくならないかチェックするのに便利です。

Android Studio 1.0 画面プレビュー

Android Studio 1.0 スクリーンサイズごとの一覧

Android Studio 1.0 OSバージョンごとの一覧

以前のバージョンで作ったプロジェクトを開くとき

runProguard → minifyEnabledに名前が変わっています。自動的に直してくれてよさそうなものですが、私のケースでは直してくれませんでした。

他にもGradleプラグインの更新によって、うまいことプロジェクトが開けない場合があると思います。

SSとるために開いた限りではこの’runProguard’が引っかかったので、以前のAndroid Studioを使って作ったプロジェクトを開く際に覚えておくといいと思います。

詳しいところはMigrating Gradle Projects to version 1.0.0を参照するといいと思います。