summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/EnlargingImageView.java2
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/util/ForegroundImageView.java121
-rwxr-xr-xorg.fox.ttrss/src/main/res/layout/headlines_row.xml1
-rwxr-xr-xorg.fox.ttrss/src/main/res/layout/headlines_row_unread.xml1
-rwxr-xr-xorg.fox.ttrss/src/main/res/values/attrs.xml3
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 &lt;<a href="mailto:[email protected]">[email protected]</a>&gt;
* @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