前言:近些天项目中需要一个放大镜的效果,但是网上大部分都是一张图片进行放大,但是现在我要对View进行放大所以特意研究了下Shader着色器
具体细节如下:
首先绘制一个放大镜的控件,需要ShapeDrawable来生成放大镜进行处理
mShapeDrawable = new ShapeDrawable(new OvalShape());生成一个椭圆形的shape,在当前控件中,首先一个初始化,用来初始化控件着色器的
public void setInitCurBitmap(Bitmap bitmap) { mBitmap = bitmap; mBitmapScale = mBitmap; mBitmapScale = Bitmap.createScaledBitmap(mBitmapScale, mBitmapScale.getWidth() * FACTOR, mBitmapScale.getHeight() * FACTOR, true); BitmapShader bitmapShader = new BitmapShader(mBitmapScale , Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); mShapeDrawable.getPaint().setShader(bitmapShader); mShapeDrawable.setBounds(0, 0, 0, 0); invalidate(); }
通过外部传入的图片来绘制放大后的图片,通过传入响应的手指点击的坐标绘制响应的放大镜
public void setCurShowPos(in