add some ripple magic to flavor image
This commit is contained in:
parent
d5f8effc6d
commit
d5daa01f61
@ -34,7 +34,7 @@ import android.view.View;
|
||||
* @author Tomáš Procházka <<a href="mailto:tomas.prochazka@inmite.eu">tomas.prochazka@gmail.com</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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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>
|
Loading…
Reference in New Issue
Block a user