背景

先说个事:最近我准备做个开源的博客园android客户端!符合Google最新的material design设计风格的!不知道有没有小伙伴愿意和我一起做呢?如果有愿意的,请私信我哦!!!!我还打算每天直播我们工作的进度,代码,以及BUG等!!




最近在做公司的一个项目!在登陆页面那儿有几个小知识点!虽然不是很难,但我猜想还是会有很多童鞋不会!所以我觉得我有必要写一篇博客来说明一下!下面呢我就先上一下效果动态图

看效果

1.用户头像是原形,另外周围有白色光圈!

2.用户名和密码输入框在空的时候点击登陆为抖动!

原理

1.用户头像是自定义ImageView,另外读者要注意画笔的模式,下面我先给个谷歌官方的截图

这里我就不过多介绍当设置了这些模式之后会有哪些效果,在下面的代码中我也只是说明我们要用的模式!!其他的读者自己去谷歌吧!!

2.第二个就是个简单的动画!!很简单!!

代码实现

一.我们先来看那个动画效果吧!我是直接写的xml文件 看代码:


这边我是用的移动x轴方向,动画只执行一次,另外,请读者注意一下,我设置了了个动画插值器(控制动画的变化的),我是用的cycleInterpolator这个,用来控制动画循环的

这个就是动画插值器了!!执行两次!

好了动画xml写完了,我们来看看怎么执行的?

很简单,看代码就行了!我就不过多解释了!!

二.自定义ImageView的实现

1.首先我得先确定ImageView的大小

在这里我的先对上面的代码中的MeasureSpec.getMode(int size)这个方法解释下?
这个方法是得到宽高大小模式的?他有三个返回值:



MeasureSpec.EXACTLY:这个是指当你的view的大小设置成fill_parent或者固定的大小 就是大小确定的

MeasureSpec.AT_MOST:这个是指当你的view的大小设置成wrap_parent的时候,不确定 自适应

MeasureSpec.UNSPECIFIED:这个是指当你的view的大小未指定的时候,这种情况不太可能出现 我们一般不考虑!


当我们了解这个的时候,就可以确定该view的宽高了!当MeasureSpec.EXACTLY的时候,就用设置的!当是 MeasureSpec.AT_MOST的时候,就是内部图片大小加padding值!
2.开始绘制 先看代码,在解释

首先我们得获取宽高的最小值,之后再把图片缩小/放大 到这个大小,之后就是得到圆形的图片!



我们直接看getRoundBitMap(Bitmap map,int min)方法,要传两个参数,一个原图还有大小!



首先我们得绘制一个和原图一样大小的画布之后绘制圆形在绘制图片,至此就得到了圆形图片了!另外,请读者注意下,就是在我们在画布上绘制了圆形之后,为画笔paint设置了Xfermode,对就是PorterDuff.Mode.SRC_IN!那这个是什么意思呢?还记得我们在文章开头现实的那个mode的所有类型吗?他已经很好的展示了当设置了这个写mode之后的效果!首先我得先说明下 dst是先绘制的,src是后绘制的?那现在就很好理解PorterDuff.Mode.SRC_IN这个的意思了!取dst和src的交集,但是是显示src(后绘制的)!现在,大家应该能明白我先画圆形在在绘制bitmap了吧!!


现在我们再来看ondraw()这个方法,当我们得到了圆形的bitmap之后,按理说直接绘制就行了,但是问题在于外面还有层白圈!其实很简单--就是同心圆而已,只不过半径不一样罢了。只要绘制个半径比bitmap大的圆就行啦!!!




至此,本篇文章结束!!



最后还得在说下:最近我准备做个开源的博客园android客户端!符合Google最新的material design设计风格的!不知道有没有小伙伴愿意和我一起做呢?如果有愿意的,请私信我哦!!!!我还打算每天直播我们工作的进度,代码,以及BUG等!!求联系哦!!!!!!!!

记一次androidd登陆页面的实现的更多相关文章

  1. Android笔记-4-实现登陆页面并跳转和简单的注册页面

    实现登陆页面并跳转和简单的注册页面   首先我们来看看布局的xml代码 login.xml <span style="font-family:Arial;font-size:18px; ...

  2. 小KING教你做android项目(二)---实现登陆页面并跳转和简单的注册页面

    原文:http://blog.csdn.net/jkingcl/article/details/10989773       今天我们主要来介绍登陆页面的实现,主要讲解的就是涉及到的布局,以及简单的跳 ...

  3. Springsecurity3.1.3配置多个登陆页面

    需求:网站的前台和后台不同的url需要不同的登陆页面,不同的异常捕获方式. spring-security3.1以后的版本支持多个<http>标签,因此本文所采用的方式就是使用两个,实际上 ...

  4. MUI APP防止登陆页面出现白屏

    最近在用MUI开发APP,总体效果,在IOS上,是完美的,但是在低端的Android手机上,就会出现性能问题,我个人觉得最严重的是,就是首页,就是APP打开的第一个页面,在iOS上,由于性能高,所以, ...

  5. web系统登陆页面增加验证码

    传统登陆页面中包含两个输入项: • 用户名 • 密码有时为了防止机器人进行自动登陆操作,或者防止恶意用户进行用户信息扫描,需增加动态验证码功能.此时,登陆页面中包含了三个输入项: • 用户名 • 密码 ...

  6. Ajax 提交session实效跳转到完整的登陆页面

    在spring security 中 Ajax提交时,session超时,局部加载登陆页面,为解决这个问题,重写ajax提交,返回的是modeview或者没有制定datatype时; 如果检测到加载到 ...

  7. js实现登陆页面的拖拽功能

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>登 ...

  8. iOS 本地加载html登陆页面

    Html的代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  9. 修改cas登陆页面-服务器端

    原文地址:http://www.cnblogs.com/liveandevil/archive/2013/03/06/2946341.html 1.cas统一认证的登陆页面位于:cas目录/WEB-I ...

随机推荐

  1. SugarCRM如何检查控制器权限?

    SugarController定义了一个实例变量$hasAccess,布尔值,默认为true.该实例变量指示使用者是否有执行摸个action的权限: class SugarController{ /* ...

  2. iOS 九宫格手势密码

    代码地址如下:http://www.demodashi.com/demo/11490.html 一.准备工作 需要准备什么环境 xcode,iOS8+ 本例子实现什么功能 主要实现手势密码设置,验证 ...

  3. LNMP环境搭建——MySQL篇

    The world's most popular open source database 1.Install MySQL root@kallen:~# apt-get install mysql-s ...

  4. jenkins部署前端node项目实例

    Jenkins 分发文件用到rsync命令   在 /etc/passwd中 修改 jenkins 为 /bin/bash jenkins:x:494:494:Jenkins Automation S ...

  5. Docker运行报Cannot connect to the Docker daemon错误

    核心问题所在:权限不足 操作docker命令提示:Cannot connect to the Docker daemon 请切换管理员权限,root权限,root安装的一般的用户访问会存在此问题.

  6. SQL中intersect、union、minus和except 运算符

    1.intersect运算符intersect运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表.当 ALL 随 INTERSECT 一起使用时 (inte ...

  7. Varnish 简介

    Varnish是高性能开源的反向代理服务器和HTTP缓存服务器 Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存 Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存 ...

  8. 点滴积累【JS】---JS小功能(列表页面隔行变色)

    效果: 代码: <head runat="server"> <title></title> <script type="text ...

  9. CCNA2.0笔记_路由分类

    直连路由:当在路由器上配置了接口的IP地址,并且接口状态为up的时候,路由表中就出现直连路由项 静态路由:静态路由是由管理员手工配置的,是单向的. 默认路由:当路由器在路由表中找不到目标网络的路由条目 ...

  10. linux学习笔记30--网络命令ifconfig

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...