Android中如何实现放大镜效果

Android中如何实现放大镜效果

本文小编为大家详细介绍“Android中如何实现放大镜效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android中如何实现放大镜效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

源码分析

Android中如何实现放大镜效果

publicclassShaderViewextendsView{privatefinalBitmapbitmap;privatefinalShapeDrawabledrawable;//放大镜的半径privatestaticfinalintRADIUS=80;//放大倍数privatestaticfinalintFACTOR=3;privatefinalMatrixmatrix=newMatrix();publicShaderView(Contextcontext){super(context);Bitmapbmp=BitmapFactory.decodeResource(getResources(),R.drawable.demo);bitmap=bmp;BitmapShadershader=newBitmapShader(Bitmap.createScaledBitmap(bmp,bmp.getWidth()*FACTOR,bmp.getHeight()*FACTOR,true),TileMode.CLAMP,TileMode.CLAMP);//圆形的drawabledrawable=newShapeDrawable(newOvalShape());drawable.getPaint().setShader(shader);drawable.setBounds(0,0,RADIUS*2,RADIUS*2);}@OverridepublicbooleanonTouchEvent(MotionEventevent){finalintx=(int)event.getX();finalinty=(int)event.getY();//这个位置表示的是,画shader的起始位置matrix.setTranslate(RADIUS-x*FACTOR,RADIUS-y*FACTOR);drawable.getPaint().getShader().setLocalMatrix(matrix);//bounds,就是那个圆的外切矩形drawable.setBounds(x-RADIUS,y-RADIUS,x+RADIUS,y+RADIUS);invalidate();returntrue;}@OverridepublicvoidonDraw(Canvascanvas){super.onDraw(canvas);canvas.drawBitmap(bitmap,0,0,null);drawable.draw(canvas);}}

基本原理就是使用ShapeDrawable构造一个圆形的drawable,然后它的paint的shader设置为将要放大的图片,然后就是简单的位置移动问题了。放大镜的半径和放大倍数都可以在代码里面修改,代码都有注释,应该很好理解了。

不过,一个问题如果只有一种解决方法的话,那未免有点令人沮丧,想玩点另类的都不行。再来看看放大镜的另外一种实现吧

publicclassPathViewextendsView{privatefinalPathmPath=newPath();privatefinalMatrixmatrix=newMatrix();privatefinalBitmapbitmap;//放大镜的半径privatestaticfinalintRADIUS=80;//放大倍数privatestaticfinalintFACTOR=2;privateintmCurrentX,mCurrentY;publicPathView(Contextcontext){super(context);mPath.addCircle(RADIUS,RADIUS,RADIUS,Direction.CW);matrix.setScale(FACTOR,FACTOR);bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.demo);}@OverridepublicbooleanonTouchEvent(MotionEventevent){mCurrentX=(int)event.getX();mCurrentY=(int)event.getY();invalidate();returntrue;}@OverridepublicvoidonDraw(Canvascanvas){super.onDraw(canvas);//底图canvas.drawBitmap(bitmap,0,0,null);//剪切canvas.translate(mCurrentX-RADIUS,mCurrentY-RADIUS);canvas.clipPath(mPath);//画放大后的图canvas.translate(RADIUS-mCurrentX*FACTOR,RADIUS-mCurrentY*FACTOR);canvas.drawBitmap(bitmap,matrix,null);}}

读到这里,这篇“Android中如何实现放大镜效果”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-04-15 22:28:32
收藏
分享
海报
0 条评论
33
上一篇:Android中全局变量与局部变量怎么使用 下一篇:Android中的Loader有什么用
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码