Fresco gif动画不能设置圆形,为了看到圆形效果,有两种解决方案。
转载注明:http://blog.csdn.net/u014614038/article/details/73609085
1.通过BaseBitmapDataSubscriber获取gif第一帧的图像bitmap,显而易见,这个最终应该可以看到圆形,只是没有了动画效果。我没有试过,具体看这篇文章有介绍。http://blog.csdn.net/hss01248/article/details/52155673?locationNum=14
2.很简单的做法,通过在Fresco控件上面覆盖一个自定义覆盖层,覆盖层view圆圈与Fresco圆形图片大小一样,该圈圈透明可见,覆盖层除圆圈以外的地方填充背景颜色,这样gif也可以实现圆形效果,并且还保留这动画效果。
下面是我写的简单的覆盖层view代码,亲测效果不错:
public class FrescoCirclePicCoverView extends View {
public FrescoCirclePicCoverView(Context context) {
super(context);
init();
}
public FrescoCirclePicCoverView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public FrescoCirclePicCoverView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private Paint mPaint;
private float Radius = 0;
private int CoverColor = Color.parseColor("#c8e3f1");
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(CoverColor);
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int Vwidth = getWidth();
int Vheight = getHeight();
Radius = Math.max(Vwidth, Vheight)/2;
float Cx = Vwidth/2;
float Cy = Vheight/2;
Path path = new Path();
path.moveTo(0, 0);
path.lineTo(0, Vheight);
path.lineTo(Vwidth, Vheight);
path.lineTo(Vwidth, 0);
path.lineTo(Vwidth/2, 0);
path.lineTo(Vwidth/2, Vheight/2-Cy);
path.addCircle(Cx, Cy, Radius, Direction.CW);
path.lineTo(Vwidth/2, 0);
canvas.drawPath(path, mPaint);
}
}