背景

先说个事:最近我准备做个开源的博客园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. Aptana插件在eclipse中安装

  2. C# 递归查找文件夹下所有文件和子文件夹的所有文件

    方法实现 public class DirectoryAllFiles { static List<FileInformation> FileList = new List<File ...

  3. Js日常笔记之数组

    1.Array构造函数有一个很大的问题,就是不同的参数,会导致它的行为不一致,es6好像专门为此对数组有升级 因此,不建议使用new Array生成新数组,直接使用数组字面量[...]是更好的做法. ...

  4. MAC 通过brew安装软件

    1.安装brew ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/instal ...

  5. 64位Windows系统如何配置32位ODBC数据源

    在64位Windows系统中,默认“数据源(ODBC)”是64位的,包括“控制面板->管理工具->数据源 ”或在“运行”中直接运行“ODBCAD32”程序.如果客户端是32位应用程序,仍然 ...

  6. Nginx(一):linux下安装nginx与配置

    linux系统为Centos 64位 准备目录 [root@instance-3lm099to ~]# mkdir /usr/local/nginx [root@instance-3lm099to ~ ...

  7. Spark-shell 无法启动之网络问题

    由于需要首次手动安装sbt,需要联网,故将虚拟机的网络适配器模式设置为"桥接模式",这样就可以和互联网相连接. 但是后面执行"spark-shell  --master ...

  8. 【flink training】 打车热点区域实时统计PopularPlaces

    http://training.data-artisans.com/是Apache Flink商业公司DataArtisans提供的一个flink学习平台,主要提供了一些业务场景和flink api结 ...

  9. python-hanoi

    #!/usr/bin/env python #-*- coding:utf-8 -*- ############################ #File Name: hanoi.py #Autho ...

  10. 跑测试没有web环境的情况

    有时候 当你跑测试的main方法的时候,会有一些莫名其妙的错误,明明mave pom的包是全的,web跑起来不会报错,可是在main方法下就是报错了,这个时候引入  <dependency> ...