【闲来无事】仿知乎广告Banner的切换功能,androidstudio实训总结

}else{

isScrollUp = true;

float r = curY / threshold ;

ivOrange.setImageBitmap(circleBitmap(bmOrange, r * screenWidth));

}

}

});

裁剪

private Bitmap circleBitmap(Bitmap o,float radius){

Bitmap outputBm = Bitmap.createBitmap(o.getWidth(),o.getHeight(), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(outputBm);

final Paint paint = new Paint();

paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

final Rect rect = new Rect(0,0,o.getWidth(),o.getHeight());

canvas.drawARGB(0,0,0,0);

canvas.drawCircle(0,0,radius,paint );

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

canvas.drawBitmap(o,rect,rect,paint);

return outputBm;

}

裁剪

private Bitmap circleBitmap(Bitmap o,float radius){

Bitmap outputBm = Bitmap.createBitmap(o.getWidth(),o.getHeight(), Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(outputBm);

final Paint paint = new Paint();

paint.setAntiAlias(true);

paint.setFilterBitmap(true);

paint.setDither(true);

final Rect rect = new Rect(0,0,o.getWidth(),o.getHeight());

canvas.drawARGB(0,0,0,0);

canvas.drawCircle(0,0,radius,paint );

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

canvas.drawBitmap(o,rect,rect,paint);

return outputBm;

}

用到paint.setXfermode,传入new PorterDuffXfermode 可以对2d图像的合成模式进行设置。

(.setXfermode这个方法功能很复杂也很强大,有兴趣的可以去百度一下)

总计有18个合成模式:

CLEAR/

SRC/

DST/

SRC_OVER/

DST_OVER

SRC_IN/

DST_IN/

SRC_OUT/

DST_OUT/

SRC_ATOP/

DST_ATOP/

XOR/

DARKEN/

LIGHTEN/

MULTIPLY/

SCREEN/

ADD/

OVERLAY/

合成样式如下图(来源自网络):

【闲来无事】仿知乎广告Banner的切换功能,androidstudio实训总结_第1张图片

这里是用的是SRC_IN 模式,通过绘制一个圆形(半径radius,并会增减),与原bmAbove重叠,之后取相交的部分作为bitmap返回,达到裁剪的效果。

《960全网最全Android开发笔记》

【闲来无事】仿知乎广告Banner的切换功能,androidstudio实训总结_第2张图片

《379页Android开发面试宝典》

【闲来无事】仿知乎广告Banner的切换功能,androidstudio实训总结_第3张图片

《507页Android开发相关源码解析》

【闲来无事】仿知乎广告Banner的切换功能,androidstudio实训总结_第4张图片

(img-Oy9Bp0jU-1646239205348)]

《379页Android开发面试宝典》

[外链图片转存中…(img-LcyiyJkQ-1646239205349)]

《507页Android开发相关源码解析》

[外链图片转存中…(img-4hoD0zbj-1646239205349)]

因为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图,大家可以**点击这里**自行领取。

你可能感兴趣的:(程序员,面试)