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中如何实现放大镜效果”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
android(如何快速开发框架 小米note开发版MIUI,安卓6.0,怎么安装Xposed框架)
稳定版,你必须先根除。你上网搜索安卓可以叫别人s框架,对方可以把框架做成jar包,把这个jar包加载到项目目录的libs文件中使...
-
android(studio 虚拟机启动不了 android studio可以当模拟器用吗)
androidstudio可以当模拟器用吗?AmdCUP引导模拟器有点复杂。雷电模拟器上的抖音怎么登录不上?不是,闪电模拟调用...
-
从实践中学习手机抓包与数据分析(android 手机抓包app)
android手机抓包app?netcapture抓包精灵app(手机抓包工具)又名sslcapture,是什么专业的安卓手机抓...
-
android(studio全局搜索 android studio怎么看app界面)
androidstudio怎么看app界面?在设备桌面点击运用直接进入到App界面,就也可以参与其他你的操作了。android-...
-
怎么把android框架源代码拉到本地(android studio如何运行别人的源代码)
androidstudio如何运行别人的源代码?androidstudio点击刚建在列表中你选择导入module,导入即可在用...
-
android(studio2022年使用教程 怎么安装Android studio详细教程)
怎么安装Androidstudio详细教程?androidstudio中haxm直接安装的方法追加:1、简单的方法打开Andr...
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
-
HTML5如何实现禁止android视频另存为
-
学java好还是学php好?
-
Android如何实现多点触控功能