Android 自定义View 使用ShapeDrawable加BitmapShader实现图片局部放大效果

来源:互联网 发布:linux汉字输入法 编辑:程序博客网 时间:2024/05/21 21:48



一些说明:

> BitmapShader中放置的Bitmap是原图的缩放后的

> ShapeDrawable的setBounds() 仅仅是设置一块shape的外矩形区,如用英语表示:size-region

> ShapeDrawable中图片默认draw的原点为:相对于图片自身的坐标(0,0)

> ShapeDrawable如果要对图片进行矩阵变化,可以使用它的shader的setLocalMatrix()

> ShapeDrawable如要显示成图片某一点为原点,需要设置它的shader的matrix,该matrix进行平移

> 因shader中的图片进行了缩放,所以平移时的坐标点也要乘以缩放值


关于上面的效果图说明:

> 上面的不规则图片,是由canvas绘制三个图形而来的,paint设置了shader

> 下方绘制了一张原图,放大镜效果:在指定下方的原图区内,有放大效果

> 其它黑色背景区内所看到的放大镜效果:只是因shader的TileMode为REPEAT


关于平移原理,简单放置了一张草图:shader/bsview.png


/** * desc   : 通过canvas绘制图形,paint中设置了BitmapShader * author : stone * email  : aa86799@163.com * time   : 2016/11/28 16 44 */public class BitmapShaderView extends View {    private Bitmap mSrcBitmap;    private BitmapShader mShader, mShaderScale;    private Paint mPaint;    private int mBmW, mBmH, mMin;    private ShapeDrawable mDrawable;    private int mRadius;    private Matrix matrix;    private int mScale;}
完整示例,见下文


我的自定义View项目地址: https://github.com/aa86799/MyCustomView (欢迎start&fork)

本文地址:https://github.com/aa86799/MyCustomView/tree/master/shader 


0 0
原创粉丝点击