Java tutorial
/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package com.linkbubble.ui; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.v4.graphics.drawable.DrawableCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import com.linkbubble.R; import com.linkbubble.Settings; public class ContentViewButton extends FrameLayout { boolean mIsTouched; private int mMaxIconSize; private ImageView mImageView; static final int sTouchedColor = 0x555d5d5e; public ContentViewButton(Context context) { this(context, null); } public ContentViewButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ContentViewButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setOnTouchListener(mButtonOnTouchListener); mImageView = new ImageView(context); mImageView.setScaleType(ImageView.ScaleType.CENTER); addView(mImageView); } private OnTouchListener mButtonOnTouchListener = new OnTouchListener() { public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { setIsTouched(true); break; } case MotionEvent.ACTION_UP: { setIsTouched(false); break; } } return false; } }; void setIsTouched(boolean isTouched) { if (isTouched && mIsTouched != isTouched) { setBackgroundColor(sTouchedColor); invalidate(); } else if (isTouched == false && mIsTouched != isTouched) { setBackgroundColor(0); invalidate(); } mIsTouched = isTouched; } int getMaxIconSize() { if (mMaxIconSize == 0) { mMaxIconSize = getResources().getDimensionPixelSize(R.dimen.content_view_button_max_height); } return mMaxIconSize; } public void setImageDrawable(Drawable drawable) { if (drawable instanceof BitmapDrawable) { int maxIconSize = getMaxIconSize(); BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; int width = bitmapDrawable.getBitmap().getWidth(); int height = bitmapDrawable.getBitmap().getHeight(); if (width > 0 && height > 0 && (width > maxIconSize || height > maxIconSize)) { int newHeight; int newWidth; if (width > height) { newWidth = maxIconSize; newHeight = (int) ((float) (height / width) * maxIconSize); } else if (width < height) { newHeight = maxIconSize; newWidth = (int) ((float) (width / height) * maxIconSize); if (0 == newWidth) { newWidth = newHeight; } } else { newWidth = newHeight = maxIconSize; } // Potential fix for user exceptions below saying that width and height must be > 0 newWidth = Math.max(1, newWidth); newHeight = Math.max(1, newHeight); try { Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmapDrawable.getBitmap(), newWidth, newHeight, true); drawable = new BitmapDrawable(getResources(), resizedBitmap); } catch (java.lang.OutOfMemoryError ex) { } } } mImageView.setImageDrawable(drawable); } public void updateTheme(Integer color) { Drawable d = mImageView.getDrawable(); if (d != null) { int textColor; if (color == null || !Settings.get().getThemeToolbar()) { textColor = Settings.get().getThemedTextColor(); } else { textColor = Settings.COLOR_WHITE; } DrawableCompat.setTint(d, textColor); } } }