package de.bsd.zwitscher.helper;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.ImageView;
import de.bsd.zwitscher.R;
/**
* View to display User images in timeline including some
* decorators for retweets or such
*
* @author Heiko W. Rupp
*/
public class UserImageView extends ImageView {
private static final int EIGHTY = 64;
private static final int FOO = 33; // 80-39
private static final Rect RT_RECT = new Rect(FOO, FOO, EIGHTY, EIGHTY);
private static final int SIXTYFOUR = 51;
private static final int SEVENTY_TWO = 58;
private static final Rect RECT20 = new Rect(0, 0, 20, 20);
private static final Rect RECT64 = new Rect(0, 0, SIXTYFOUR, SIXTYFOUR);
private static final Rect RECT72 = new Rect(0, 0, SEVENTY_TWO, SEVENTY_TWO);
private static final Rect RECT80 = new Rect(0, 0, EIGHTY, EIGHTY);
private static final Rect RT_UNKNOWN_RECT = new Rect(70,70,80,80);
private Bitmap baseBitmap;
private boolean isFavorite;
private boolean isRetweet;
private static Xfermode SRC_OVER = new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER);
private Bitmap rtBitmap;
private Paint paint = new Paint();
private Bitmap unknownUserBitmap;
private Bitmap favBitmap;
private Rect favRect ;
private final Rect unknownUserBitmapRect;
private Rect baseBitmapRect;
public UserImageView(Context context, AttributeSet attrs) {
super(context, attrs);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(context,attrs);
setLayoutParams(params);
unknownUserBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.user_unknown);
unknownUserBitmapRect = new Rect(0,0,unknownUserBitmap.getWidth(),unknownUserBitmap.getHeight());
favBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.favorite_on);
favRect = new Rect(0,0,favBitmap.getWidth(),favBitmap.getHeight());
}
/**
* Set the bitmap for the user of the tweet
* @param baseBitmap Bitmap to display. Null is allowed
*/
public void setImageBitmap(Bitmap baseBitmap) {
this.baseBitmap = baseBitmap;
if (baseBitmap!=null) {
baseBitmapRect = new Rect(0,0,baseBitmap.getWidth(),baseBitmap.getHeight());
}
else {
baseBitmapRect = null;
}
}
/**
* Set the bitmap of the retweeting user
* @param bitmap Bitmap to display (in small). Null is allowed
*/
public void setRtImage(Bitmap bitmap) {
rtBitmap = bitmap;
}
/**
* If the argument is true, the View will get a tiny favorite marker
* @param favorited Is the matching tweet a Favorite?
*/
public void markFavorite(boolean favorited) {
isFavorite = favorited;
}
/**
* If the argument is true, show the rtBitmap (or a marker if not rtBitmap is set).
* @param isRetweet Is the matching tweet a Retweet?
*/
public void markRetweet(boolean isRetweet) {
this.isRetweet =isRetweet;
}
@Override
protected void onDraw(Canvas canvas) {
float factor = getHeight() / 64.0f;
Rect SRC;
if (baseBitmap==null) {
baseBitmap= unknownUserBitmap;
SRC = unknownUserBitmapRect;
} else {
SRC = baseBitmapRect;
}
// First draw the tweet's user bitmap
if (isRetweet) {
if (rtBitmap!=null)
canvas.drawBitmap(baseBitmap,SRC, scale(RECT64,factor), paint);
else
canvas.drawBitmap(baseBitmap,SRC,scale(RECT72,factor), paint);
}
else
canvas.drawBitmap(baseBitmap,SRC,scale(RECT80,factor), paint);
// And then overlay with markers
paint.setXfermode(SRC_OVER);
if (isFavorite) {
// paint.setColor(Color.GREEN);
// canvas.drawCircle(0f,0f,10, paint);
canvas.drawBitmap(favBitmap,favRect,RECT20,paint);
}
if (isRetweet) {
if (rtBitmap != null) {
Rect RT_SRC = new Rect(0,0,rtBitmap.getWidth(),rtBitmap.getHeight());
canvas.drawBitmap(rtBitmap, RT_SRC, scale(RT_RECT,factor), paint);
} else {
paint.setColor(Color.MAGENTA);
canvas.drawRect(scale(RT_UNKNOWN_RECT,factor), paint);
}
}
}
RectF scale(Rect in,float factor) {
RectF out = new RectF(in);
out.left *= factor;
out.right *= factor;
out.bottom *= factor;
out.top *= factor;
return out;
}
}