BitmapDrawableImageView.java revision 46616414f6dabb6d57b0ac433a5fabe2abb8b5a9
146616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei/*
246616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * Copyright (C) 2013 The Android Open Source Project
346616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei *
446616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * Licensed under the Apache License, Version 2.0 (the "License");
546616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * you may not use this file except in compliance with the License.
646616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * You may obtain a copy of the License at
746616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei *
846616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei *      http://www.apache.org/licenses/LICENSE-2.0
946616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei *
1046616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * Unless required by applicable law or agreed to in writing, software
1146616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * distributed under the License is distributed on an "AS IS" BASIS,
1246616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * See the License for the specific language governing permissions and
1446616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei * limitations under the License.
1546616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei */
1646616414f6dabb6d57b0ac433a5fabe2abb8b5a9Mark Wei
17a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weipackage com.android.bitmap.view;
18a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
19a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport android.content.Context;
20a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport android.graphics.Bitmap;
21a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport android.graphics.drawable.Drawable;
22a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport android.net.Uri;
23a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport android.util.AttributeSet;
24a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport android.widget.ImageView;
25a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
26a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weiimport com.android.bitmap.drawable.BasicBitmapDrawable;
27a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
28a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei/**
29a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei * A helpful ImageView replacement that can generally be used in lieu of ImageView.
30a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei * BasicImageView has logic to unbind its BasicBitmapDrawable when it is detached from the window.
31a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei */
32a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Weipublic class BasicImageView extends ImageView {
33a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    private BasicBitmapDrawable mDrawable;
34a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
35a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public BasicImageView(final Context context) {
36a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        this(context, null);
37a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
38a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
39a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public BasicImageView(final Context context, final AttributeSet attrs) {
40a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        this(context, attrs, 0);
41a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
42a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
43a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public BasicImageView(final Context context, final AttributeSet attrs, final int defStyle) {
44a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        super(context, attrs, defStyle);
45a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
46a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
47a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    /**
48a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei     * Set the given BasicBitmapDrawable as the source for this BasicImageView.
49a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei     * @param drawable The source drawable.
50a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei     */
51a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public void setDrawable(BasicBitmapDrawable drawable) {
52a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        super.setImageDrawable(drawable);
53a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        mDrawable = drawable;
54a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
55a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
56a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public BasicBitmapDrawable getDrawable() {
57a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        return mDrawable;
58a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
59a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
60a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    @Override
61a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    protected void onDetachedFromWindow() {
62a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        super.onDetachedFromWindow();
63a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
64a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        mDrawable.unbind();
65a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
66a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
67a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    @Override
68a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public void setImageDrawable(final Drawable drawable) {
69a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        throw new UnsupportedOperationException(
70a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                "BasicImageView is only compatible with BasicBitmapDrawable. Use setDrawable() "
71a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                        + "instead.");
72a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
73a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
74a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    @Override
75a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public void setImageResource(final int resId) {
76a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        throw new UnsupportedOperationException(
77a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                "BasicImageView is only compatible with BasicBitmapDrawable. Use setDrawable() "
78a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                        + "instead.");
79a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
80a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
81a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    @Override
82a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public void setImageURI(final Uri uri) {
83a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        throw new UnsupportedOperationException(
84a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                "BasicImageView is only compatible with BasicBitmapDrawable. Use setDrawable() "
85a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                        + "instead.");
86a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
87a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei
88a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    @Override
89a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    public void setImageBitmap(final Bitmap bm) {
90a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei        throw new UnsupportedOperationException(
91a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                "BasicImageView is only compatible with BasicBitmapDrawable. Use setDrawable() "
92a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei                        + "instead.");
93a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei    }
94a23358fbfd62c7aa1c84bfa8395b4dc427a71ce6Mark Wei}
95