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