tsurutanのつぶやき

備忘録としてつぶやきます

Android Fabricを使ったクラッシュ分析 テスト配布

f:id:tsurutan:20161014113752p:plain

今回は今買収されそうで話題なTwitter社のFabricを紹介したいと思います。

Fabricとは、開発者の方々がより良いアプリケーションをつくるために便利なモジュール形式のモバイルプラットフォームです。

FabricをAndroidに導入することで、Web上のサイトからクラッシュの分析やAndroid Studioから直接apkのテスト配布が行えます。

非常に便利なので、ぜひ使って見ましょう!

まずはアカウント登録

Fabric - Twitter's Mobile Development Platform

Fabricの公式ページに行き

f:id:tsurutan:20161014104320p:plain

Get Started with Fabricのボタンを押します。

すると登録フォームが出てくるので、適当なユーザーネームとアドレス、パスワードを入力してメール認証ボタンを押し、メールが届くので記載されているurlを押し、登録を完了させてください。

f:id:tsurutan:20161014104704p:plain

Android Studioにプラグインを入れる

さて、アカウントが登録できたところで次にAndroid StudioにFabricのプラグインを入れましょう。

メニューからAndroid Studioを選択し、表示されたプルダウンメニューの中にあるPreferencesをクリックします。

f:id:tsurutan:20161014105013p:plain

するとPreferenceのダイアログが表示されるので、そのサイドバーにあるPluginをクリックし、下の中央にあるBrowse repositoriesというボタンを押します。

f:id:tsurutan:20161014105240p:plain

f:id:tsurutan:20161014105350p:plain

そして表示されたダイアログの検索欄でFabricと入力するとFabric for Android Studioと出てくるのでインストールをし、Android Studioを再起動しましょう。

f:id:tsurutan:20161014105821p:plain

再起動して、メニューバーにこのようなFabricのアイコンが表示されれば正常にインストールが完了しております。

f:id:tsurutan:20161014110241p:plain

Fabric SDKを導入しよう。

Fabricのプラグインがインストールできましたら、あとは簡単です。

Fabricのアイコンをクリックすると右側にFabricのUIが表示されるので、先ほど作成したアカウント情報を入力しログインします。

すると、このようにFabricに搭載されている様々なツールが表示されるので今回はClashriticsを選択し、インストールしましょう。

f:id:tsurutan:20161014110645p:plain

f:id:tsurutan:20161014110738p:plain

f:id:tsurutan:20161014110807p:plain

なんとFabric プラグインが自動的にコードをプロジェクト(build.gradleApplication, Acitivty)に書き加えてくれるので、これだけでSDKの導入は終わりです。

そしてWebからFabricにアクセスすると登録したアプリのクラッシュ情報を見ることができます。

f:id:tsurutan:20161014113405p:plain

テスト配布しよう

Fabricにはテスト配布をする機能も搭載されております。 まずFabricのホーム画面まで戻ると登録したアプリのリストが表示されるので、配布したいアプリを選択します。 すると下のような画面が表示されるので左上の配布ボタンをクリックします。

f:id:tsurutan:20161014111634p:plain

そしてこの画面に選択したアプリのapkをドラッグ&ドロップすると

f:id:tsurutan:20161014111735p:plain

このように配布したいユーザーのメールアドレスを登録する画面に遷移するので、メールアドレスを登録しましょう。

f:id:tsurutan:20161014111840p:plain

そして、このapkの情報を記入してDistuributeボタンを押すと配布が完了します。

f:id:tsurutan:20161014113031j:plain

登録したメールアドレスにこのようなメールが来ているはずです。

とても簡単ですので、是非みなさんもFabricを導入してみましょう!!!

オススメの記事

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

  • 作者: 筒井俊祐,里山南人,松田承一,笹城戸裕記,毛受崇洋
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/06/18
  • メディア: 単行本
  • この商品を含むブログを見る

Picasso を使った画像表示

f:id:tsurutan:20161011104324p:plain

今回は神Jake Wharton 氏が作成したPicassoという画像のダウンロードやらキャッシュをやってくれるライブラリーについて紹介したいと思います。

使い方

使い方は至って簡単!!

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

loadに画像が置かれているurlを私intoに画像を表示したいImageViewを渡すだけです。

また、画像の加工もでき

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)

このようにすれば中央を中心に50*50でクロップすることができ、また角丸の画像を作りたいならば

public class CropSquareTransformation implements Transformation {
  @Override public Bitmap transform(Bitmap source) {
    int size = Math.min(source.getWidth(), source.getHeight());
    int x = (source.getWidth() - size) / 2;
    int y = (source.getHeight() - size) / 2;
    Bitmap result = Bitmap.createBitmap(source, x, y, size, size);
    if (result != source) {
      source.recycle();
    }
    return result;
  }

  @Override public String key() { return "square()"; }
}

というTransformationを作成し

Picasso.with(context)
  .load(url)
  .transform(new CropSquareTransformation())
  .into(imageView)

といった感じで渡してください。

また、自分でTransformationを作るのが面倒くさいという方はwasabeefさんが様々なTransformationを作成してくださり、ライブラリーとして配布されているのでそちらを使うのがオススメです。

github.com

Picassoでは画像の読み込み中やエラーが出たときに表示する画像を指定することができます。

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

また、ネットに上がっている画像のみではなくローカルに保存された画像もpathを指定することで表示することができます。

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);

キャッシュのサイズを制限することもできます。

int maxSize = MAX_CACHE_SIZE;
Picasso picasso = new Picasso.Builder(context)
                              .memoryCache(new LruCache(maxSize))
                              .build();

このmaxSizeはバイトを表します。

またデバッグでイメージがネット、キャッシュ、Diskのどれから呼び出されているのかsetIndicatorsEnabled(true)を使い可視化することができます。

f:id:tsurutan:20161011104952p:plain

どうやって使うの?

おなじみアプリケーションレベルのbuild.gradle

compile 'com.squareup.picasso:picasso:2.5.2'

と記述するだけです!最高ですね!!

オススメの記事

www.tsurutan.com

www.tsurutan.com

www.tsurutan.com

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

  • 作者: 筒井俊祐,里山南人,松田承一,笹城戸裕記,毛受崇洋
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/06/18
  • メディア: 単行本
  • この商品を含むブログを見る

Android ローカライゼーションでテキスト幅を揃える

f:id:tsurutan:20161010111900p:plain

Androidは多くの言語が搭載されており、開発者にとってアプリケーションの多言語化は切っても切れない関係です。

単言語化で最も気をつけなければならないことは、あるフレーズを別の言語に置き換えたときに、テキストの長さが変わってしまいデザインが崩れてしまうことです。

今回は、このようなケースに備えて、自動的に文字サイズを変えて一定の幅にテキストを抑えてくれるAutofitHelperというライブラリーについて紹介したいと思います。

使い方

使い方は至ってシンプルです。

文字の大きさを自動で変えたいTextView

AutofitHelper.create(textView);

このようにAutfitHelper.createの引数に渡すだけです。

ただし、渡すTextViewにはmaxLinesなどを指定し、行数を制限してください。

またxmlからも指定することができ

<me.grantland.widget.AutofitLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        />
</me.grantland.widget.AutofitLayout>

このように、変化させたいViewをAutofitLayoutでラップするか

<me.grantland.widget.AutofitTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:maxLines="2"
    android:textSize="40sp"
    autofit:minTextSize="16sp"
    />

AutofitTextViewAutofitButtonというウィジェットを使うことができます。

特にCustomしたTextViewを使ってないのであれば、提供されているウィジェットを使うことをおすすめします。

f:id:tsurutan:20161010111509g:plain

また、English(XA)かロシア語が他の言語と比べてフレーズが長いと言われているので多言語化をテストするときはこれらを使うのがおすすめです。

ちなみにEnglish(XA)とは、標準的な英語を三割ほど文字数を増やして長くしたものです。

どうやって使うの?

おなじみアプリケーションレベルのbuild.gradle

dependencies {
    compile 'me.grantland:autofittextview:0.2.+'
}

と記述するだけです。簡単ですね!

問題点

AutofitHelperには現在のバージョンでは問題点があり、TextViewに.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0)を指定して、drawableを描画すると文字の幅を見誤ってしまいうまく調整することができません。

この対策として、Libraryをローカルに引っ張ってきてAutofitHelper.javaの98行目を

int targetWidth = view.getWidth() - view.getPaddingLeft() - view.getPaddingRight();

から

int targetWidth = view.getWidth() - view.getCompoundPaddingLeft() - view.getCompoundPaddingRight();

に変更しましょう。

それとも、現在修正されたプルリクが出されているのでそれをjitpackで使うか、マージされるか待った方が良いかもしれませんね。

オススメの記事

www.tsurutan.com

www.tsurutan.com

www.tsurutan.com

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

ほんきで学ぶAndroidアプリ開発入門 第2版 Android SDK 7/Android Studio 2.X対応

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

Android UI Automator Viewer を使った開発

f:id:tsurutan:20161009095134j:plain

転職や就職などをして、既存のサービスの開発に携わることがある人はコードとViewの対応関係を調べるのに苦戦した経験があるのではないのでしょうか?

プロジェクトのコードを読んでいちいち対応関係を見るのは場合によっては非常に効率が悪いです。

そこでそのような場合に備えて、今回はUI Automator Viewerを使って簡単に対応関係を調べる方法について紹介したいと思います。

ちなみに元々UI Automator Viewer とはその名の通り、UI Automatorという公式で提供されているUIテストをサポートするツールです。

このツールを使ってresource-idを取得しましょう!

どうやって使うの?

ではUI Automator Viewerの使い方について説明します。

まずAndroid Sdkのフォルダへ移動してください。

sdkの中には下記のようなフォルダが入っているはずです。

f:id:tsurutan:20161009092050p:plain

次にtoolsというフォルダへ移動してください。

f:id:tsurutan:20161009092057p:plain

toolsの中にuiautomatorviewerがありましたね。

そうです、これを使うのです。

そのまま./uiautomatorviewerと入力して実行しても良いのですが、今後も使うことを考えてbashやらzshにpathを登録しておきましょう。

export PATH=$PATH:/あなたのsdkがあるpath/sdk/tools/uiautomatorviewer

そしてuiautomtorviewerを実行すると。

f:id:tsurutan:20161009093001p:plain

このような画面が表示されると思います。

実機とPCを接続して、uiautomatorviewerの左上にあるアイコンをクリックすると実機内に表示された画面のView層がCaptureされ表示されます。

f:id:tsurutan:20161009093320p:plain

今回はTwitterのプロフィール画面をCaptureしてみました。

気になるViewをクリックすると、そのViewのresource-idが表示されます。

ここで表示されたresource-idを使って直接viewにアクセスすることができるのです。

UI Automator Viewer の良いところは自分のアプリケーション以外にもViewの関連idを参照することができることです。

またViewのヒエラルキーも見ることができるので、TwitterやFacebookなどの大御所なアプリケーションを解析してみて、命名規則やViewの構造など参考にしてみると良いかもしれませんね。

オススメの記事

www.tsurutan.com

www.tsurutan.com

www.tsurutan.com

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

  • 作者: 筒井俊祐,里山南人,松田承一,笹城戸裕記,毛受崇洋
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/06/18
  • メディア: 単行本
  • この商品を含むブログを見る

ビジネスにつながる 儲かるFacebookの投稿講座

ビジネスにつながる 儲かるFacebookの投稿講座

動作が遅い!?Macを最適化して高速化しよう!

コンピューターシステムの動作が遅くなることはよくあることです。

その原因として、ウィルスやスパイウェアがPCに入り込んでいるのが考えられます。

Macは他のPCに比べてこのあたりしっかりしていますが、それでも動作が遅くなってしまうことがあります。

そこで今回はMacを最適化して、高速化する方法を紹介したいと思います。

1.起動しているアプリケーションを全て終了させる

f:id:tsurutan:20161008114613p:plain

まずはじめにアプリケーションバーが下(設定で変えた人は左右)にあることを確認してください。

アプリケーションのアイコンの下に黒い丸がある時、これはアプリケーションがまだ動いていることを表します。

f:id:tsurutan:20161008114626p:plain

そこで、アイコンを右クリックして終了のボタンを押し、アプリを停止させます。

f:id:tsurutan:20161008114636p:plain

ファインダー以外は停止できるのでこのような状態になるはずです。

2.Macを再起動する

左上のメニューにアップルのロゴがあるのでそれをクリックするとこのようなプルダウンメニューが出てきます。

f:id:tsurutan:20161008115023p:plain

プルダウンメニューの中に再起動...という項目があるのでそちらをクリックし再起動します。

3.起動直後に開くアプリケーションを外す

Macを起動すると自動的に立ち上がるアプリケーションが存在するので、起動時間が遅くなったりメモリーを取られたりしてしまうので、不要なアプリケーションを除きましょう。

まずは先程と同じようにアップルアイコンを押しプルダウンメニューを開きます。

プルダウンメニューにシステム環境設定とあるのでそちらをクリックします。 f:id:tsurutan:20161008115636p:plain

次に表示されたダイアログの中にユーザとグループという項目があるのでそちらをクリックします。 f:id:tsurutan:20161008115643p:plain

その後ログイン項目というタブを押すと自動的に立ち上がるアプリケーションが表示されます。 f:id:tsurutan:20161008115742p:plain

使っておらず不要だと思ったアプリケーションを取り除きましょう。 f:id:tsurutan:20161008115750p:plain

4.使っていないオプションを外す

先ほどと同じようにシステム環境設定を開きます

f:id:tsurutan:20161008115636p:plain

Bluetoothやアクセシビリティを開きます。

f:id:tsurutan:20161008121726p:plain

するとこのようにマウスポインタをシェイクして見つけると言ったあまり使わないオプションがオンになっています。 f:id:tsurutan:20161008121428p:plain

不要だと思うオプションは外しましょう。 f:id:tsurutan:20161008121437p:plain

5.Macの発熱を防ぐ

PCは使用している周りの環境に左右され熱量を発します。

基本的により乾燥していて、温度が16–24 °Cの環境でPCを動かすのが良いでしょう。

f:id:tsurutan:20161008122521p:plain

また、MacにはPC内の温度に合わせてファンを回してくれるアプリケーションが多く存在するのでそれらを使うことをおすすめします。

f:id:tsurutan:20161008122423p:plain

www.macupdate.com

6.ウィジェットを減らす

dashboardを開きます。

f:id:tsurutan:20161008122637p:plain

ウィジェットの中には温度を計測してくれたり、日付を表示してくれたりとても便利なものが多いですが、dashboard使用していなくてもバックグラウンドで起動されているので不要なものは取り除きましょう。

f:id:tsurutan:20161008123202p:plain

7.アクティビティモニターでチェックする

アプリケーションのユーティリティフォルダーに行きアクティビティモニターを見つけましょう。

f:id:tsurutan:20161008123315p:plain

f:id:tsurutan:20161008123331p:plain

このツールはMacがどれだけCPU、メモリー、RAMを使用しているか詳細に見ることができます。

f:id:tsurutan:20161008123718p:plain

使っていないのにCPU、メモリー、RAMを消費しているアプリケーションを見つけたら、どんどん終了させて行きましょう。

8.メンテナンスアプリケーションを使い、使用していないファイルを削除する

Macの中には使用していないのに容量を多く占めているファイルやキャッシュが意外と存在します。

幸運にもMacにはこれらを可視化してくれるApplicationが多く存在するので、これらを使い不要なファイルやキャッシュをどんどん削除していきましょう。

個人的にはDr. Cleanerが無料で且つわかりやすいのでおすすめです。

終わりに

如何でしたでしょうか?

これらのステップをすべてやるのは面倒くさいと思うかもしれませんが、段違いにMacのスピードが高速化すると思います。

私も良くアプリケーションを開発していてフリーズすることが多かったのですが、これらのステップを踏むことで悩みは解消されました。

普段からMacのフリーズに悩まされている皆さん、これを機に快適なMac生活を送ってみては如何でしょうか?

Apple Pencil MK0C2J/A

Apple Pencil MK0C2J/A

APPLE MacBook Pro 13.3/2.5GHz Core i5/4GB/500GB/8xSuperDrive DL MD101J/A

APPLE MacBook Pro 13.3/2.5GHz Core i5/4GB/500GB/8xSuperDrive DL MD101J/A

モノが少ないと快適に働ける―書類の山から解放されるミニマリズム的整理術

モノが少ないと快適に働ける―書類の山から解放されるミニマリズム的整理術

Android 強制アップデートの実装方法

f:id:tsurutan:20161007144504p:plain

今回はAndroidアプリの強制アップデートの方法について説明したいと思います。

現在リリースされているアプリケーションで致命的なバグを見つけた時、すぐにでもそのバグを取り除きたいですよね?

でも、Androidで自動アップデートを設定していない人だと、アプリケーションが更新されたことに気づかない人が多いです。

このようなケースを対処するためにAndroidの最新バージョンを確認し、強制アップデートをする方法について説明したいと思います。

実装

まずは、現在使用しているアプリケーションのバージョンを取得します。

PackageManager pm = mContext.getPackageManager();
        PackageInfo pInfo = null;

        try {
            pInfo = pm.getPackageInfo(mContext.getPackageName(), 0);

        } catch (PackageManager.NameNotFoundException e1) {
            e1.printStackTrace();
        }
        mCurrentVersion = pInfo.versionName;

そして次に最新バージョンの値を取得するのですが、一々独自サーバーで管理するのは面倒くさいのでGoogle play storeの公式ページから引っ張てきちゃいましょう。

ここでGoogle play storeのhtmlを処理するのでJsoupというライブラリーをインポートしてください。

Jsoupの使い方については次回の記事で説明したいと思います。

                Document doc = Jsoup.connect(mContext.getString(R.string.play_store_url)).get();
                mLatestVersion = doc.getElementsByAttributeValue
                        ("itemprop", "softwareVersion").first().text();

Jsoupconnectには公開しているアプリのurlを渡してください。

Play storeのhtmlを見るとわかると思うのですが

f:id:tsurutan:20161007143614p:plain

itempropsoftwareVersionとなっているタグの中にバージョンが記述されていますね。

それをdoc.getElementsByAttributeValue("itemprop", "softwareVersion").first().text()を使って取ってきているのです。

また、これはapi通信を行っているので非同期処理を行わなくてはいけません。

AsyncTaskなどを拡張したクラスの中で記述しましょう。

そして、最新バージョンを取得できたので現在のバージョンと比較します。

int latestVersion = Integer.valueOf(mLatestVersion.split("\\.")[1]);
                int currentVersion = Integer.valueOf(mCurrentVersion.split("\\.")[1]);
                Log.d("TEST", "Current Version " + currentVersion + " Latest Version " + latestVersion);
                if (latestVersion > currentVersion) {
                    showUpdateDialog();
                }

このコードではマイナーバージョンを比較しており、例えば1.0.01.1.0になった時にダイアログを表示するようにしております。

あとは表示するダイアログのcancelablefalseにすれば完成です。

一応全体のコードを載せておきますね。

public class UpdateChecker {
    private String mCurrentVersion;
    private String mLatestVersion;
    private Context mContext;
    private AppCompatActivity mActivity;

    @Inject
    public UpdateChecker(Context context) {
        mContext = context;
    }

    public void checkUpdate(AppCompatActivity activity) {
        mActivity = activity;
        PackageManager pm = mContext.getPackageManager();
        PackageInfo pInfo = null;

        try {
            pInfo = pm.getPackageInfo(mContext.getPackageName(), 0);

        } catch (PackageManager.NameNotFoundException e1) {
            e1.printStackTrace();
        }
        mCurrentVersion = pInfo.versionName;

        new GetLatestVersion().execute();
    }

    private class GetLatestVersion extends AsyncTask<String, String, JSONObject> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected JSONObject doInBackground(String... params) {
            try {
                Document doc = Jsoup.connect(mContext.getString(R.string.play_store_url)).get();
                mLatestVersion = doc.getElementsByAttributeValue
                        ("itemprop", "softwareVersion").first().text();

            } catch (Exception e) {
                e.printStackTrace();
            }

            return new JSONObject();
        }

        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            if (mLatestVersion != null) {
                int latestVersion = Integer.valueOf(mLatestVersion.split("\\.")[1]);
                int currentVersion = Integer.valueOf(mCurrentVersion.split("\\.")[1]);
                Log.d("TEST", "Current Version " + currentVersion + " Latest Version " + latestVersion);
                if (latestVersion > currentVersion) {
                    showUpdateDialog();
                }
            }
            super.onPostExecute(jsonObject);
        }
    }

    private void showUpdateDialog() {
        MaterialDialog.Builder materialDialog = new MaterialDialog.Builder(mActivity);
        materialDialog.cancelable(false);
        materialDialog
                .title(mContext.getString(R.string.update_title))
                .positiveText(mContext.getString(R.string.update))
                .onPositive(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse
                                (mContext.getString(R.string.play_store_intent_url))).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
                        mActivity.finish();
                        dialog.dismiss();
                    }
                })
                .show();
    }
}

オススメ記事

www.tsurutan.com

www.tsurutan.com

www.tsurutan.com

超初心者でも大丈夫! はじめてのAndroidプログラミング Android Studio 2対応

超初心者でも大丈夫! はじめてのAndroidプログラミング Android Studio 2対応

Effective Modern C++ ―C++11/14プログラムを進化させる42項目

Effective Modern C++ ―C++11/14プログラムを進化させる42項目

Android Facebookのようなボタンの実装

f:id:tsurutan:20161006213233p:plain

今回はFacebookのようなボタンお実装方法について説明します。 使用するのはShineButtonというライブラリーです。

github.com

使用方法

使用方法はとても簡単です。 まずはxmlに

 <com.sackcentury.shinebuttonlib.ShineButton
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_centerInParent="true"
                android:src="@android:color/darker_gray"
                android:id="@+id/po_image2"
                app:btn_color="@android:color/darker_gray"
                app:btn_fill_color="@android:color/holo_green_dark"
                app:allow_random_color="false"
                app:siShape="@raw/smile"/>

と記入します。

btn_colorはボタンが押される前のオリジナルカラーでbtn_fill_colorはボタンが押された後のカラー。

allow_random_colorはボタンクリック直後の輝いている円の色をランダムにするか、siShapeはボタンのリソースを指定できます。

あとはこのようにJavaで呼び出せば完成です。

shineButton = (ShineButton) findViewById(R.id.shine_button);
 shineButton.init(activity);

またxmlではなくjavaから付加情報を記入することができます。

 ShineButton shineButtonJava = new ShineButton(this);
 shineButtonJava.setBtnColor(Color.GRAY);
 shineButtonJava.setBtnFillColor(Color.RED);
 shineButtonJava.setShapeResource(R.raw.heart);
 shineButtonJava.setAllowRandomColor(true);
 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
 shineButtonJava.setLayoutParams(layoutParams);
 if (linearLayout != null) {
     linearLayout.addView(shineButtonJava);
 }

他にも付加情報があるので表で説明します。

Property Java method Description
siShape void setShapeResource(int) リソースの指定 (png)
btn_color void setBtnColor(int) オリジナルカラーの指定
btn_fill_color void setBtnFillColor(int) クリック後のカラーの指定
allow_random_color void setAllowRandomColor(boolean) クリック直後の円カラーをランダムにするか指定
shine_animation_duration void setAnimDuration(int) 輝くアニメーションの間隔を指定
big_shine_color void setBigShineColor(int) 輝きの円(大)のカラー指定
click_animation_duration void setClickAnimDuration(int) ボタン自体のアニメーション間隔の指定
enable_flashing void enableFlashing(boolean) フラッシュするアニメーションにするか指定
shine_count void setShineCount(int) 円の個数をしてい
shine_distance_multiple void setShineDistanceMultiple(float) 輝きの範囲を指定
shine_turn_angle void setShineTurnAngle(float) 円の曲がる角度を指定
shine_size void setShineSize(int) 輝きのサイズをピクセル単位で指定
small_shine_color void setSmallShineColor(int) 輝きの円(小)のカラー指定
small_shine_offset_angle void setSmallShineOffAngle(float) 円(大)から円(小)に遷移する方向の指定

そして、このように指定すると

app:shine_turn_angle="20"
app:shine_count="15"
app:allow_random_color="true"
app:enable_flashing="true"

f:id:tsurutan:20161006215447g:plain

とても綺麗ですね! 

イメージをハートにすればTwitter風のボタンも作ることができますね。

ボタンひとつ変えるだけでUI UXの改善ができるので、是非実装してみてください!

どうやって使うの?

アプリケーションレベルのbuild.gradleに

buildscript {
    repositories {
        mavenCentral()
    }
}
dependencies {
    compile 'com.sackcentury:shinebutton:0.1.6'
}

と記述すれば使用できます!

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

黒帯エンジニアが教えるプロの技術 Android開発の教科書 (ヤフー黒帯シリーズ)

  • 作者: 筒井俊祐,里山南人,松田承一,笹城戸裕記,毛受崇洋
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2016/06/18
  • メディア: 単行本
  • この商品を含むブログを見る

Android UI Cookbook for 4.0 ICS(Ice Cream Sandwich)アプリ開発術

Android UI Cookbook for 4.0 ICS(Ice Cream Sandwich)アプリ開発術