· モバもく会 勉強会 Android

モバもく会を開催して、Github Trendingを軽く読んでみた

  • このエントリーをはてなブックマークに追加

はじめに

モバもく会という、モバイルに関連したもくもく会を開催しました。 一人はOpenSourceにプルリクを投げたり、一人は読書をしていました。

僕は、2017/07/17の時点のTrending in open sourceのAndroidに関係ある上位3つのサンプルをうごかしてみたのですが、そのときのまとめです。(※android-interview-questionsは除外しています)

https://github.com/trending/java?since=weekly

SmartRefreshLayout

https://github.com/scwang90/SmartRefreshLayout

Pull to refreshのいい感じのライブラリです。 動きはReadmeに書かれてるので見てみてください。

基本的にはRecyclerViewSmartRefreshLayoutで包めばよいだけのようです。

<android.support.v7.widget.Toolbar 
style="@style/AppTheme.Toolbar"
        android:id="@+id/toolbar"
        app:title="@string/fragment_refresh_styles"/>

    <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srlEnableLoadmore="false"
        app:srlEnableHeaderTranslationContent="true">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/white"
            tools:listitem="@android:layout/simple_list_item_2"/>
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>

サンプル動かしてみました。

「下拉可以刷新」などの中国語で書かれてるところを変更したいなぁと思ってソースを見てみました。

こちらを見る限り、おそらくmHeaderTextにセットすればいいのかなぁと思ってみてたら、mHeaderTextに外から自由にセットできるメソッドがないっぽい。。

public static String REFRESH_HEADER_PULLDOWN = "下拉可以刷新";

とpublic static Stringでfinalではなかったので、直接書き換えてみたところ、

index 2b056cd..fbdf4a7 100644
--- a/app/src/main/java/com/scwang/refreshlayout/fragment/RefreshStylesFragment.java
+++ b/app/src/main/java/com/scwang/refreshlayout/fragment/RefreshStylesFragment.java
@@ -85,6 +85,7 @@ public class RefreshStylesFragment extends Fragment implements AdapterView.OnIte
     @Override
     public void onViewCreated(View root, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(root, savedInstanceState);
+        ClassicsHeader.REFRESH_HEADER_PULLDOWN = "Pull down to reresh";
 
         View view = root.findViewById(recyclerView);
         if (view instanceof RecyclerView) {

下記のように変更出来ました。

Pull to refreshとは直接関係ありません、サンプルソースを見ていてこれは使っていきたいなぁと思ったのが、

enum TabFragmentとして列挙型としている点です。

たまたま「現場で役立つシステム設計の原則」という本の中で ~区分オブジェクト~ として紹介されてることでしたので、Androidなどではこのように使うといいのかと一つ勉強になりました。 タブで使われるフラグメントが一覧でわかりやすく、タブを追加したいときも容易に追加できそうなことがわかります。

あと、Android Studioの使い方ですが、下図にあるように、 //<editor-fold desc="background">//<editor-fold desc="API">とコメントがあるのが気になりました。

editor-fold とあるので、使い方はなんとなく想像つくと思うのですが、

折りたたむとこうなりました。 メソッド単位で折りたためるのは知っていたのですが、

//<editor-fold desc="background">
~~~
//</editor-fold>

<editor-fold></editor-fold>で挟んだところが一気に折りたためるのは知らなかったです。しかもそれが何か説明(desc)を付けることができます。

RichPath

https://github.com/tarek360/RichPath

SVGをAndroidでまともに使ったことなかったのですが、Android 5.0からSVGが使えるんですね。 受託開発だとまだ4.4が切れないところも多いのですが、5.0以降で良い場合は、サイズごとの余計な画像が要らなくなるので積極的につかっていきたいと思いました。

こちらのツールでAnimatedVectorDrawableを作れるのですが、RichPathはprogramaticallyにアニメーションできるのが良いのでしょうか。

https://shapeshifter.design/>

SVG力がなくて、こちらに関してはもう少しSVG力を付けてからみてみようと思います。

Spotlight

https://github.com/TakuSemba/Spotlight

サンプルを動かしてみました。

かっこいいですね!

スポットライトしたいTargetを作って、

SimpleTarget firstTarget = new SimpleTarget.Builder(MainActivity.this).setPoint(findViewById(R.id.one))
                        .setRadius(100f)
                        .setTitle("first title")
                        .setDescription("first description")
                        .build();
                        

作ったTargetをsetTargetsでセットするだけ!

Spotlight.with(MainActivity.this)
        .setDuration(1000L)
        .setAnimation(new DecelerateInterpolator(2f))
        .setTargets(firstTarget, secondTarget, thirdTarget)
        .setOnSpotlightStartedListener(new OnSpotlightStartedListener() {
            @Override
            public void onStarted() {
                Toast.makeText(MainActivity.this, "spotlight is started", Toast.LENGTH_SHORT)
                        .show();
            }
        })
        .setOnSpotlightEndedListener(new OnSpotlightEndedListener() {
            @Override
            public void onEnded() {
                Toast.makeText(MainActivity.this, "spotlight is ended", Toast.LENGTH_SHORT).show();
            }
        })
        .start();

SimpleTarget.Builder(MainActivity.this).setPointの引数は座標も指定できるので、WebViewでも使えそうかなと思いました。

まとめ

ライブラリの中のソースコードまでガッツリ読まなくて、サンプルコード読むだけでも知らないことが多いことがわかりました。

サンプル動かしてみるだけならそんなに時間もかからないので、ちょっと空き時間に動かしてみると発見があるかもしれません。

  • このエントリーをはてなブックマークに追加
  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket