From d5daa01f6120b4664caefae279d0cdc5b24e434d Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 6 Dec 2015 00:05:04 +0300 Subject: [PATCH] add some ripple magic to flavor image --- .../fox/ttrss/util/EnlargingImageView.java | 2 +- .../fox/ttrss/util/ForegroundImageView.java | 121 ++++++++++++++++++ .../src/main/res/layout/headlines_row.xml | 1 + .../main/res/layout/headlines_row_unread.xml | 1 + org.fox.ttrss/src/main/res/values/attrs.xml | 3 + 5 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 org.fox.ttrss/src/main/java/org/fox/ttrss/util/ForegroundImageView.java diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/EnlargingImageView.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/EnlargingImageView.java index bf9d48d8..ff433074 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/EnlargingImageView.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/EnlargingImageView.java @@ -34,7 +34,7 @@ import android.view.View; * @author Tomáš Procházka <tomas.prochazka@gmail.com> * @version $Revision: 0$ ($Date: 6.6.2011 18:16:52$) */ -public class EnlargingImageView extends android.widget.ImageView { +public class EnlargingImageView extends ForegroundImageView { private int mDrawableWidth; private int mDrawableHeight; diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/ForegroundImageView.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/ForegroundImageView.java new file mode 100644 index 00000000..f02158e9 --- /dev/null +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/ForegroundImageView.java @@ -0,0 +1,121 @@ +package org.fox.ttrss.util; + +// https://gist.github.com/JakeWharton/0a251d67649305d84e8a + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.ImageView; + +import org.fox.ttrss.R; + +public class ForegroundImageView extends ImageView { + private Drawable foreground; + + public ForegroundImageView(Context context) { + this(context, null); + } + + public ForegroundImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ForegroundImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundImageView); + Drawable foreground = a.getDrawable(R.styleable.ForegroundImageView_android_foreground); + if (foreground != null) { + setForeground(foreground); + } + a.recycle(); + } + + /** + * Supply a drawable resource that is to be rendered on top of all of the child + * views in the frame layout. + * + * @param drawableResId The drawable resource to be drawn on top of the children. + */ + public void setForegroundResource(int drawableResId) { + setForeground(getContext().getResources().getDrawable(drawableResId)); + } + + /** + * Supply a Drawable that is to be rendered on top of all of the child + * views in the frame layout. + * + * @param drawable The Drawable to be drawn on top of the children. + */ + public void setForeground(Drawable drawable) { + if (foreground == drawable) { + return; + } + if (foreground != null) { + foreground.setCallback(null); + unscheduleDrawable(foreground); + } + + foreground = drawable; + + if (drawable != null) { + drawable.setCallback(this); + if (drawable.isStateful()) { + drawable.setState(getDrawableState()); + } + } + requestLayout(); + invalidate(); + } + + @Override protected boolean verifyDrawable(Drawable who) { + return super.verifyDrawable(who) || who == foreground; + } + + @Override public void jumpDrawablesToCurrentState() { + super.jumpDrawablesToCurrentState(); + if (foreground != null) foreground.jumpToCurrentState(); + } + + @Override protected void drawableStateChanged() { + super.drawableStateChanged(); + if (foreground != null && foreground.isStateful()) { + foreground.setState(getDrawableState()); + } + } + + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (foreground != null) { + foreground.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight()); + invalidate(); + } + } + + @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if (foreground != null) { + foreground.setBounds(0, 0, w, h); + invalidate(); + } + } + + @Override public void draw(Canvas canvas) { + super.draw(canvas); + + if (foreground != null) { + foreground.draw(canvas); + } + } + + @Override public void drawableHotspotChanged(float x, float y) { + super.drawableHotspotChanged(x, y); + + if (foreground != null && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + foreground.setHotspot(x, y); + } + } +} \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row.xml b/org.fox.ttrss/src/main/res/layout/headlines_row.xml index a7f321c5..87734749 100755 --- a/org.fox.ttrss/src/main/res/layout/headlines_row.xml +++ b/org.fox.ttrss/src/main/res/layout/headlines_row.xml @@ -44,6 +44,7 @@ + + + \ No newline at end of file