首页 文章 精选 留言 我的

精选列表

搜索[android things],共10000篇文章
优秀的个人博客,低调大师

Android开发万能圆角ImageView

作者简介 大家好,新的一周又开始了!本篇来自 马云飞 的投稿,分享了如何实现圆角图片,希望能帮助有需要的朋友。 马云飞 的博客地址: http://blog.csdn.net/sw950729 正文 最近一两个月没事做,然后就开始封装一些东西,昨天上司让我帮他做的圆角图片。思路自然是和网上的demo不一样的。 网上demo的效果: 差不多应该是这样的,但是容易出一些问题,比如你的图片本身就是个圆角?又或者图片太大,你想缩小显示,但出现显示内容不全? 我想实现的效果是这样的: 图画的较丑,见谅。 意思就是以他的宽高的最小值,为正方形的宽给他做圆角,当然长方形也可以的,因为我试了效果,没有问题,你们到时候可以自己尝试。 参考文章: http://blog.csdn.net/lmj623565791/article/details/41967509 这是翔神的文章,不过他的效果,并不是我想要的,因为,他的绘图是从(0,0)点然后截取宽高绘图,并不是我想要的重中间截取,然后绘图。 大体代码和他的差不多。不过依旧删除了一些无用的代码(哈哈,这个我抄代码的特性,没用放着干嘛,碍眼。) 好了下面上代码。初始化: 这边我用到了dp2px。这个就是将dp转换成px。网上代码一堆~: 既然继承了ImageView,少不了的自然是onMeasure方法: 下面就是重点了,对 bitmapshader 不了解的,去看看这个: http://blog.csdn.net/aigestudio/article/details/41799811 设置bitmapshader的代码如下: 如果有人看了前面我给的参考文章,那么,你可以发现,我把这个类的代码进行了改动,差不多就是把图片的起点坐标从(0,0)移动到了我想要的起点。 至于为什么,我们打开ImageView的源码,找到Center_Crop。这快代码的意思差不多是将图片居中把。 来,我们上源码: 他怎么计算的scale我们别管它,重点是如何计算他的dx和dy。 这里我就举个例子来计算。drawable的宽和高是(300,200)。我要绘制的view的宽高是(200,200)。按照 我的思路绘图是从(50,0)到(250,250),而不是(0,0)到(200,200)。 话不多说。我们看源码的计算: 我们画图,来说明这一切,看完图,你或许就懂了。 红色框是我们之后的,那这样,1这块区域可以理解成没了。销毁了。但是实际的效果是这样: 圆形好像看似没什么问题,那你们自己看圆角图片左边是不是被拉伸,这个拉伸距离应该刚好是我们之前计算得到的50dp。因为上图的1那块已经不存在了,所以你画图的时候那快距离就是拉伸的距离。现在我们看看-50dp的图。 1 的部分被移出去了。但他依然是存在的,所以绘制的图是不会出现任何拉伸的。perfect~ 属性配置完了,剩下的就是ondraw方法咯。很简单,代码如下: 当然你也得考虑到 onsizechanged 的时候,代码也不多: 好了。在这边我补上attrs属性: 现在。一个完美的,万能的圆角ImageVIew就解决了。不过好像还缺点什么,对了。自行修改圆角,自行修改类型,加上这个才算完美。 附上代码: 现在我们新建个xml。放2张图片。一个圆角,一个圆形,先看看效果如何: 多张图片在外层加一个scrollview。好了。我们来看一下效果: 完美~~ 圆角大小自行修改。类型自行修改。好了。今天主要内容就这么多把。整理了2个多小时~也是够够的。 作者:马云飞 来源:51CTO

优秀的个人博客,低调大师

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); //圆形的drawable drawable=newShapeDrawable(newOvalShape()); drawable.getPaint().setShader(shader); drawable.setBounds(0,0,RADIUS*2,RADIUS*2); } @Override publicbooleanonTouchEvent(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; } @Override publicvoidonDraw(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); } @Override publicbooleanonTouchEvent(MotionEventevent){ mCurrentX=(int)event.getX(); mCurrentY=(int)event.getY(); invalidate(); returntrue; } @Override publicvoidonDraw(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); } } 这里使用的是Path类,将canvas剪切出一块圆形区域,在其上绘制放大的部分。 本文作者:佚名 来源:51CTO

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册