LoginSignup
2
1

More than 5 years have passed since last update.

[Android] ImageView を継承して新しいクラスを作る

Last updated at Posted at 2017-07-26

あらまし

ImageView にアニメーションで点滅(blink)するメソッドをつけたくなった。
点滅するための実装はなるべく利用者に出さず、ただ.blink()だけ呼び出すだけで点滅させたい。

そこで、ImageViewを継承した新しいクラスを実装して、新しいメソッドを追加する。

実装

BlinkableImageView.java
package com.hoge_company.fooapp.widget;

import android.content.Context;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;


class BlinkableImageView extends AppCompatImageView {
    public BlinkableImageView(Context context) {
        super(context);
        initialize();
    }

    public BlinkableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize();
    }

    public BlinkableImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initialize();
    }

    protected void initialize() {
      // なにか準備があるならここで
    }

    public void blink(int durationMillis) {
      // 点滅させるための実装
      // getContext() でContextを取得可能
    }
}

コンストラクタを3つ、publicでオーバーライドする。
筆者はpublicを失念して結構な時間を消費してしまった。

点滅させるための実装は本題から外れるのでここには書かない。

こんな感じでxmlには書ける。属性は適当だ。

activity_main.xml
<com.hoge_company.fooapp.widget.BlinkableImageView
            android:id="@+id/foo_image"
            android:visibility="invisible"
            android:scaleType="fitCenter"
            android:adjustViewBounds="false"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />

参考

コンストラクタをすべてオーバーライドしないケースも見受けられるが、
将来に渡って大丈夫かどうか不安なので、すべてオーバーライドすることにした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1