diff options
Diffstat (limited to 'org.fox.ttrss/src/main')
5 files changed, 127 insertions, 1 deletions
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 <<a href="mailto:[email protected]">[email protected]</a>> * @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 @@ <org.fox.ttrss.util.EnlargingImageView android:id="@+id/flavor_image" + android:foreground="@drawable/ripple" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml b/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml index 769dd8d7..f9347788 100755 --- a/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml +++ b/org.fox.ttrss/src/main/res/layout/headlines_row_unread.xml @@ -45,6 +45,7 @@ <org.fox.ttrss.util.EnlargingImageView android:id="@+id/flavor_image" + android:foreground="@drawable/ripple" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" diff --git a/org.fox.ttrss/src/main/res/values/attrs.xml b/org.fox.ttrss/src/main/res/values/attrs.xml index e0bfb02c..3f4922d0 100755 --- a/org.fox.ttrss/src/main/res/values/attrs.xml +++ b/org.fox.ttrss/src/main/res/values/attrs.xml @@ -49,4 +49,7 @@ <attr format="reference|color" name="insetForeground"> </attr></declare-styleable> <attr name="drawer_header" format="reference" /> + <declare-styleable name="ForegroundImageView"> + <attr name="android:foreground"/> + </declare-styleable> </resources>
\ No newline at end of file |