あらまし
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" />
参考
- http://qiita.com/muran001/items/047b0e5ba9e10f4846ae
- http://gamecat0.blog53.fc2.com/blog-entry-272.html
- http://y-anz-m.blogspot.jp/2014/03/androidimageview.html
コンストラクタをすべてオーバーライドしないケースも見受けられるが、
将来に渡って大丈夫かどうか不安なので、すべてオーバーライドすることにした。