ImageCardView.java revision 9de363b8db05106b03d115c266859fe200d41db7
1b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn/* 2b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project 3b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * 4b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at 6b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * 7b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 8b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * 9b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License 10b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under 12b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn * the License. 13b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn */ 14b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpackage android.support.v17.leanback.widget; 15b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 16b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.content.Context; 17b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.graphics.drawable.Drawable; 18b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.support.v17.leanback.R; 19b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.text.TextUtils; 20b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.util.AttributeSet; 21b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.LayoutInflater; 22b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.view.View; 23b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilsonimport android.view.ViewGroup; 24b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.ImageView; 259de363b8db05106b03d115c266859fe200d41db7Dake Guimport android.widget.ImageView.ScaleType; 26b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournimport android.widget.TextView; 27b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 28961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn/** 29961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn * A card view with an {@link ImageView} as its main region. 30961a8f12d1fbeeb86ea066f9f2c693abb2ce50f2Tim Kilbourn */ 31b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbournpublic class ImageCardView extends BaseCardView { 32b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 33b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private ImageView mImageView; 34b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private View mInfoArea; 35b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private TextView mTitleView; 36b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private TextView mContentView; 37b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private ImageView mBadgeImage; 38b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn private ImageView mBadgeFadeMask; 39b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 40b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public ImageCardView(Context context) { 41b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn this(context, null); 42b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 43b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 44b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public ImageCardView(Context context, AttributeSet attrs) { 45b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn this(context, attrs, R.attr.imageCardViewStyle); 46b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 47b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 48b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public ImageCardView(Context context, AttributeSet attrs, int defStyle) { 49b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn super(context, attrs, defStyle); 50b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 51b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn LayoutInflater inflater = LayoutInflater.from(context); 52b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn View v = inflater.inflate(R.layout.lb_image_card_view, this); 53b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 54b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mImageView = (ImageView) v.findViewById(R.id.main_image); 55b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setVisibility(View.INVISIBLE); 56b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mInfoArea = v.findViewById(R.id.info_field); 57b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mTitleView = (TextView) v.findViewById(R.id.title_text); 58b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mContentView = (TextView) v.findViewById(R.id.content_text); 59b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage = (ImageView) v.findViewById(R.id.extra_badge); 60b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeFadeMask = (ImageView) v.findViewById(R.id.fade_mask); 61b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 62b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 639de363b8db05106b03d115c266859fe200d41db7Dake Gu public final ImageView getMainImageView() { 649de363b8db05106b03d115c266859fe200d41db7Dake Gu return mImageView; 659de363b8db05106b03d115c266859fe200d41db7Dake Gu } 669de363b8db05106b03d115c266859fe200d41db7Dake Gu 679de363b8db05106b03d115c266859fe200d41db7Dake Gu public void setMainImageAdjustViewBounds(boolean adjustViewBounds) { 689de363b8db05106b03d115c266859fe200d41db7Dake Gu if (mImageView != null) { 699de363b8db05106b03d115c266859fe200d41db7Dake Gu mImageView.setAdjustViewBounds(adjustViewBounds); 709de363b8db05106b03d115c266859fe200d41db7Dake Gu } 719de363b8db05106b03d115c266859fe200d41db7Dake Gu } 729de363b8db05106b03d115c266859fe200d41db7Dake Gu 739de363b8db05106b03d115c266859fe200d41db7Dake Gu public void setMainImageScaleType(ScaleType scaleType) { 749de363b8db05106b03d115c266859fe200d41db7Dake Gu if (mImageView != null) { 759de363b8db05106b03d115c266859fe200d41db7Dake Gu mImageView.setScaleType(scaleType); 769de363b8db05106b03d115c266859fe200d41db7Dake Gu } 779de363b8db05106b03d115c266859fe200d41db7Dake Gu } 789de363b8db05106b03d115c266859fe200d41db7Dake Gu 79b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setMainImage(Drawable drawable) { 80b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mImageView == null) { 81b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 82b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 83b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 84b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mImageView.setImageDrawable(drawable); 85b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson if (drawable == null) { 86b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setVisibility(View.INVISIBLE); 87b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } else { 88b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setVisibility(View.VISIBLE); 89b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson fadeIn(mImageView); 90b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 91b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 92b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson 93b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson public void setMainImageDimensions(int width, int height) { 94b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson ViewGroup.LayoutParams lp = mImageView.getLayoutParams(); 95b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson lp.width = width; 96b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson lp.height = height; 97b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mImageView.setLayoutParams(lp); 98b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 99b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 100b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public Drawable getMainImage() { 101b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mImageView == null) { 102b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 103b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 104b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 105b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mImageView.getDrawable(); 106b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 107b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 108b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setTitleText(CharSequence text) { 109b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mTitleView == null) { 110b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 111b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 112b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 113b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mTitleView.setText(text); 114b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson setTextMaxLines(); 115b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 116b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 117b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public CharSequence getTitleText() { 118b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mTitleView == null) { 119b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 120b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 121b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 122b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mTitleView.getText(); 123b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 124b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 125b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setContentText(CharSequence text) { 126b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mContentView == null) { 127b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 128b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 129b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 130b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mContentView.setText(text); 131b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson setTextMaxLines(); 132b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 133b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 134b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public CharSequence getContentText() { 135b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mContentView == null) { 136b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 137b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 138b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 139b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mContentView.getText(); 140b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 141b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 142b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public void setBadgeImage(Drawable drawable) { 143b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mBadgeImage == null) { 144b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return; 145b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 146b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 147b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (drawable != null) { 148b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage.setImageDrawable(drawable); 149b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage.setVisibility(View.VISIBLE); 150b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeFadeMask.setVisibility(View.VISIBLE); 151b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } else { 152b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeImage.setVisibility(View.GONE); 153b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn mBadgeFadeMask.setVisibility(View.GONE); 154b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 155b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 156b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 157b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn public Drawable getBadgeImage() { 158b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn if (mBadgeImage == null) { 159b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return null; 160b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 161b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn 162b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn return mBadgeImage.getDrawable(); 163b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn } 164b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson 165b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson private void fadeIn(View v) { 166b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson v.setAlpha(0f); 167b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson v.animate().alpha(1f).setDuration(v.getContext().getResources().getInteger( 168b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson android.R.integer.config_shortAnimTime)).start(); 169b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 170b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson 171b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson private void setTextMaxLines() { 172b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson if (TextUtils.isEmpty(getTitleText())) { 173b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mContentView.setMaxLines(2); 174b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } else { 175b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mContentView.setMaxLines(1); 176b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 177b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson if (TextUtils.isEmpty(getContentText())) { 178b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mTitleView.setMaxLines(2); 179b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } else { 180b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson mTitleView.setMaxLines(1); 181b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 182b6e24f60743bd2022dd496126f0ff683ff6b3713Andrew Wilson } 183b55f0880c367c0b7e4132e7d954b60725e01e0b2Tim Kilbourn} 184