2012/07/24

Android の Custom View で Scrollbar を使用する

Android で Custom View を作った場合、Scroll bar を表示したいケースがあると思います。

こういうやつ

実現する方法はいろいろあると思いますが、android.view.View にはデフォルトで Scroll bar を表示するオプションがついているので、これを使ってやれば簡単です。

まず、Custom View の computeXXXScrollRange() を Override して実際のサイズを返すようにします。

    @Override
    protected int computeHorizontalScrollRange() {
        return REAL_WIDTH;
    }

    @Override
    protected int computeVerticalScrollRange() {
        return REAL_HEIGHT;
    }

この他に computeXXXScrollOffset()、computeXXXScrollExtent() を Override することで、表示をカスタマイズすることが出来ます。
ただ、基本的にはデフォルトのままで良いでしょう。
各パラメータの関係は以下のとおりです。



また、カスタムビューをlayoutに記述する際、scrollbars アトリビュートを記述する必要があります。
(setXXXScrollBarEnabled(true); をコード中に記述しても大丈夫です)
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <com.kokufu.android.test.scrollablecustomview.ScrollableView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="horizontal|vertical" />

</merge>


今回、テスト用に作成したプロジェクトを GitHub にアップしましたので、ご自由にお使いください。
2013/10/29 追記
諸事情により GitHub から Bitbucket に移動しました。
$ git clone https://kokufu@bitbucket.org/kokufu/ScrollableCustomViewExperiment.git


また、以下に書いてあったのですが、この方法を ViewGroup (FrameLayout とか) に対して使用する場合は、コンストラクタに setWillNotDraw(false); を書いておかないといけないようです。
Android: Enable Scrollbars in Custom View - Stack Overflow

0 件のコメント: